[OS]프로세스와 스레드[1]

왈왈왈 (Yoon tae uk)·2022년 1월 12일
1
post-thumbnail

Process

- 정의

An entity that executes a given piece of code

정의를 간단히 보면 지정된 코드를 실행하는 엔티티라고 정의되어있다.

간단히 말해서 컴퓨터 프로그램을 텍스트 파일로 정의한 뒤 이 프로그램을 실행을 시키면 프로그램에서 언급한 모든 작업을 해주는것이 프로세스이다.

  • Process
    • 프로세스는 고유의 excution stack을 가지고 있다.
    • 프로세스는 고유의 memory pages을 가지고 있다.
    • 프로세스는 고유의 descriptors table을 가지고 있다.
    • unique process ID (PID)

Fork()

  • 정의
    • 새 프로세스를 만드는 시스템 호출입니다. 새로 만들어진 프로세스는 몇 가지를 제외하고 부모 프로세스와 동일합니다.
  • process creation
    • fork() 시스템을 이용하여 자신이랑 동일한 child process를 생성한다
    • 원래의 process는 parent process가 된다.
    • child process는 독립된 id값을 가진다.
  • 호출이 반환 될 때
    • 부모 프로세스의 반환값은 자식프로세스의 PID(Process Id)값을 반환한다.
    • 자식 프로세스는 ‘0’을 반환한다.
    • 자식 프로세스의 호출에 실패하면 ‘-1’을 반환한다 (Memory 부족, Too many process 등)

Process Management

  • Zombie process
    • 프로세스가 종료가 될 때 자식 프로세스에서 부모 프로세스에게 SIGCHLD라는 신호를 보내면 부모 프로세스가 자식 프로세스의 자원 (data collection)을 삭제해준다.
    • 하지만 예기치 못하게 자식 프로세스가 죽어버리면 데이터를 반환하지 못하고 자식 프로세스는 죽어버렸기 때문에 시스템에서는 이를 재사용할 수 없다. 이와 같은 현상을 Zombie process라고 한다.
  • Orphan Process
    • 영어를 그대로 해석을 해보면 고아 프로세스이다. 이 뜻 그대로 만약 자식 프로세스가 죽기 전에 부모 프로세스가 먼저 죽어버리면 자식 프로세스가 SIGCHLD라는 신호를 보내도 부모 프로세스가 없기 때문에 clean up을 할 수가 없어 Zombie process 가 될 수가 있다.
    • 해결책은 자식 프로세스를 다른 부모 프로세스에게 입양을 시키면 된다.
    • 보통 프로세스가 시작하는 init process에 자식 프로세스를 추가를 하여 해결한다.

wait() System Call

  • 만약 자식 프로세스가 SIGCHLD 신호를 보낼때 부모 프로세스 에서는 Wait 시스템 콜을 사용하여 clean up 을 한다.

Process State

  • Process States
    • New
    • Ready
    • Running
    • Waiting
    • Terminated

  • New : 부모 프로세스가 자식 프로세스를 생성한다.
  • Admitted : Os kernel에서 process management에 새로 생긴 process를 등록한다.
  • Ready : 실행이 가능한 프로세스 (cpu에 할당되어서 실행이 되고 있는 상태는 아니다)
  • Scheduler dispatch : os에서 어떤 조건에 의하여 running 될 process를 고른다.
  • Running : 실행이 되고 있는 프로세스 (CPU를 사용 중)
  • Interrupt : Run중인 프로세스를 ready state로 보내는 것
  • Waiting : 외부에 있는 I/O에 작업을 한다면 cpu의 작업 속도에 비하여 엄청나게 느리기 때문에 cpu의 자원이 낭비되게 된다 그렇기 때문에 I/O 작업 중인 프로세스를 Waiting state로 보내고 다른 프로세스가 Run state로 들어오게 되고 Waiting state에 있는 I/O 작업이 끝나면 Ready state로 돌아와 다시 차례를 기다린다.
  • Terminated : Running state에서 작업이 완료된 프로세스를 종료한다.

Process Control Block

프로세스가 여러 개가 존재하면 Os kernel 부분에서 process management에서 관리를 하기 위하여 Process를 생성할 때 정보가 담긴 PCB를 생성한다.

  • Process ID : 해당 프로세스 ID
  • Parent PID : 해당 프로세스 부모 ID
  • Next process block : PCB블록들은 LinkedList의 구조처럼 다음 PCB의 주소 값의 정보를 가지고 있다.
  • Process state : 프로세스의 현재 상태
  • TCBs : 각 스레드의 control block
  • CPU information : 레지스터 값, 메모리 값 저장
  • CPU register contents
  • Program counter
  • Memory-management information
  • Additional information
  • I/O status

Context Switcing

Context Switcing 이란 CPU 가 하나인데 여러 개의 프로세스를 실행하는 것처럼 하고 싶을 때 CPU를 하나를 공유를 하며 여러 개의 프로세스가 시간으로 나누어 순서대로 바꾸어 가면서 프로세스가 연속으로 동작하는 것처럼 보이게 하는 기술 (소프트웨어적)이다.

os kernel에서 관리를 한다.

  • 프로세스 A와 B의 Context Switcing

    • 프로세스 A가 cpu를 사용 중이고, B는 대기상태 일 때 일정 시간이 지난 후 interrupt 가 프로세스 A에 들어와 프로세스 B에게 양도를 한다.
    • 프로세스 A가 정지되는 순간에 cpu의 모든 register값들을 자신의 PCB에 저장을 한다. (Save)
    • 프로세스 B는 실행 전에 자기 자신의 PCB로 가서 저장했던 값들을 다시 불러내어 cpu의 정보들을 로딩을 한다. (Load)
  • Overhead

    • PCB에 값을 저장하고 로딩하는 동안 cpu가 아무 일을 하지 않는 시간이 존재한다.
    • CPU를 효율적으로 사용하지 못한다.

Process 와 Threads

  • Process (protection)
    • 각각의 프로세스는 독립된 메모리 공간과 활동영역을 보장을 받는다 (공유 X)
  • Threads (concurrency)
    • 하나의 코드
    • 프로세스의 내부에 존재하며 프로세스보다 작은 개념이라고 생각하면 된다.
    • 하나의 프로세스에 한 개의 스레드가 존재할 수도 있고 여러 개의 스레드가 존재할 수 있다.
    • 하나의 프로세스 안의 스레드들은 address space와 resource를 공유한다.
  • Hyper-threads
    • 하드웨어로 context switching을 도와주는 것
    • OverHead를 줄일 수 있다
  • Single and multi - threads process의 비교
    • 멀티 스레드 간의 context switching이 되어야 한다 그렇기 때문에 thread 마다 register와 stack의 정보가 필요하다.

Examples of Multi-Threaded Program

  • Embedded systems
    • 스마트폰, 스마트 워치, 노트북
  • Server with multi-core processor
  • Network Servers

참고한 사이트

http://www.kocw.net/home/search/kemView.dokemId=1223639&ar=relateCourse
https://www.geeksforgeeks.org/difference-between-process-and-thread/

0개의 댓글