본문 바로가기
Computer Science/운영체제

Processes & Threads

by sepang 2022. 3. 24.
반응형

  오늘 배울 내용은 프로세스에 관한 내용이다. 시스템 프로그래밍(참고)에서도 다뤘던 주제인지라 겹치는 내용이 꽤 있기 때문에 어느정도 진행하다가 뒷 내용은 생략할 것이다.

What is a Process?

  프로세스라는 말은 컴퓨터를 하면서 많이 접해봤을 것이다. 가령 프로그램이 먹통일 때 ctrl+alt+del을 눌러서 작업 관리자로 들어가 '프로세스' 탭에서 프로그램을 강제 종료할 때도 이를 볼 수 있다. 이와 연관지어 생각해보면 프로세스는 프로그램 실행의 단위라고 이해할 수도 있겠다. 그렇기 때문에 OS에서 관리하는 protection의 기본 단위이다. 또한 각 프로세스를 인식해야 하기에 프로세스는 PID라는 id로 인식된다. 이러한 프로세스에는 CPU 컨텍스트(레지스터 등 프로세스를 실행하고 있는 CPU의 상황), OS 자원(주소 공간, 열린 파일 등), 기타 정보(PID, ,state, owner, ...)같은 정보들이 담긴다. 

fig 1

  fig 1을 보자. 작성된 프로그램은 디스크(storage)에 저장되어있다. 이 프로그램을 실행하면 프로그램에 담겨있는 코드와 데이터가 메모리로 옮겨지면서 공간이 할당되는데, PC(Program Counter)가 코드를 실행하면서 프로그램이 동작한다. 이렇게 실행되고 있는 프로그램이 프로세스인 것이다. 그렇다면 어떻게 디스크에 있는 프로그램 파일이 프로세스화 되는 것일까?

 

From Program to Process

fig 2
fig 3

  fig 2와 같이 우리가 high-level 언어로 작성된 프로그램(코드)는 컴파일러에 의해 fig 3같은 어셈블리어(assembly code)로 변환되고 이것은 또 어셈블러에 의해 컴퓨터가 이해할 수 있는 기계어(manchine code, fig 3에서는 16진수로 줄여서 표현했음)로 변환된다. 어셈블리 코드 한줄은 기계어 명령(machine instruction) 하나와 대응되는 것을 확인할 수 있다. 

  그렇기에 우리는 프로그램을 (기계어)명령의 시퀀스라고도 말할 수 있다. 명령은 컴퓨터에게 특정 연산을 수행(load, store, add, increment, ...)하라고 알리는 비트들의 집합이다.

fig 4-1
fig 4-2

  fig 4-1 처럼 메모리의 한 공간에는 프로그램을 실행하는 instruction이 모여있다. fig 4-2에서는 CPU가 어떤 과정으로 instruction들을 수행하는지 알 수 있다. 기계어로 이루어진 instruction 하나를 CPU가 가져와서(fetch) CPU는 이를 해석하여(decode) 알맞은 동작을 수행한(excute) 후에 PC를 업데이트하여(update) 다음 instruction으로 넘어가는 것이다.

Running Multiple Processes

 

fig 4-3
fig 4-4

  저번에 OS의 control 이슈에서 나왔던 상황이다. 위에서 이해했듯이 CPU하나는 한번에 하나의 instruction만 처리할 수 있다. CPU가 여러개 있다면 fig 4-3처럼 여러 프로세스를 동시에 실행할 수 있지만 하나만 있다면 동시에 실행하는 것 처럼 '보이기' 위해 OS에서 실행 중인 프로세스를 적절하게 전환해야한다고 설명했었다.

 

Process: Key Abstraction

  프로세스는 더 나은 사용 경험을 위해 추상화를 하는데 두가지 주요 추상화를 알아보자. 간단하게 뭔지 확인하고 이후에 더 자세히 알아볼 것이다.

  첫번째로 추상화하는 것은 Logical control flow이다. 좀전에 프로세스를 동시에 실행하는 것처럼 보이게 하기 위해 프로세스를 적절히 전환해야한다고 했다. 이것을 OS에서는 context switching이라고 한다. 이를 통해 우리는 프로그램을 작성하면서 CPU의 스케줄링을 신경쓰지 않고도 마치 프로그램이 CPU를 독점하고 있는 것처럼 느끼게 한다.

  두번째는 Private address space이다. 각 프로그램은 메인 메모리를 독점적으로 사용하는 것 처럼 보이지만 이는 가상 메모리(virtual memory)라고 불리는 커널 메커니즘을 제공하기 때문이다.

 

Process Control Block (PCB)

fig 5

  PCB또는 Process Descriptor, Task Control Block이라고 불리는 이것은 CPU 레지스터, PID, 프로세스 상태, CPU 스케줄링 정보 등 프로세스에 대한 모든 정보를 담는 자료구조이다. 리눅스에서는 task_struct라는 구조체로 구현되어 있다. 프로그램이 실행되어 프로세스가 생성되면 PCB가 생성되어 이 프로세스에 대한 정보를 담는다. 이것이 필요한 이유는 프로세스 전환 시에 이전 프로세스에 대한 정보를 기억하고 있어야 다음에 다시 차례가 돌아왔을 때 이전 상태를 파악하고 다시 그 다음부터 instruction을 실행할 수 있기 때문이다.

 

Process Hierarchy

Process Creation

fig 6-1

  하나의 프로세스는 다른 프로세스를 생성할 수 있는데 이때 프로세스 간 부모-자식 관계가 형성된다. 이러한 계층 구조를 Unix(Windows에는 존재X)에서는 process group이라고 한다. fig 6처럼 쉘이 돌고있는데 명령어를 입력하여 cat과 wc라는 프로세스를 생성하여 실행할 수 있는 것 처럼 말이다. 트리 형식의 연결 구조를 가지기 때문에 부모의 리소스를 공유할 수도 있다. 때문에 자식 프로세스는 부모의 리소스를 모두/일부 공유하거나 공유하지 않을 수도 있다.

  자식 프로세스가 생성되면 부모 프로세스의 주소공간에 있는 내용을 복사할 수도 있고 자신이 실행하고자 하는 프로그램을 불러올 수도 있다. 그리고 부모 프로세스와 자식 프로세스를 동시에 실행할 수도 있고 자식 프로세스가 종료될 때까지 부모 프로세스가 대기할 수도 있다.

fig 6-2

  이와 관련된 시스템 콜에는 fork(), exec()이 있다. fork()는 새로운 자식 프로세스를 생성하고 exec()는 현재 프로세스를 다른 프로그램으로 대체한다. fig 6-2에서는 fork()로 자식 프로세스를 생성하고 생성된 자식 프로세스는 exec()를 통해 부모와는 다른 아예 새로운 프로그램을 실행하게 된다.

Example

fig 6-3
fig 6-4

  fig 6-3을 보자. if문에서 fork()를 호출하여 자식 프로세스가 생성된다. fork()의 반환값으로 부모 프로세스는 자식의 PID를 받고 자식 프로세스는 0을 반환받는다. 이에 대한 결과가 fig 6-4인데 실행마다 결과가 다르다. 그 이유는 실행할 때마다 cpu 스케줄링에 차이가 있기 때문이다.

Process Termination

  프로세스가 종료되는 경우는 여러가지다.

  • Normal exit: 평범하게 할 역할을 다하고 종료되는 경우
  • Error exit: 일반적인 에러가 발생하는 경우
  • Fatal error: 잘못된 메모리 공간에 접근하는 segmentation fault, 권한이 없는 작업을 시도하는 protection fault 등의 치명적인 오류가 발생했을 때. 프로그램이 바로 죽어버린다.
  • Killed by another process: 리눅스에서 ctrl+c처럼 특정 signal을 보내 프로그램이 종료되는 경우
  • Zomble process: 프로세스는 종료되었는데 메모리에는 그대로 남아있는 경우. 자식 프로세스는 종료되지 않았는데 부모 프로세스가 종료되거나 할 때 발생한다.

Process State Trasitions

fig 6-5

  프로세스는 fig 6-5와 같이 5개의 상태를 가질 수 있다. 프로세스가 새로 생성되면(new)ready 상태가 되어 스케줄러가 자신을 cpu에게 넘길 때 까지 대기한다. 그러다가 cpu에게 넘겨지면 프로세스를 실행(running)한다. 이후 i/O 이벤트 같은게 발생하면 waiting 상태로 바뀌어서 I/O 작업을 수행한 뒤 다 끝나면 다시 ready 상태가 된다. 이러한 과정을 반복하다가 프로그램이 끝나면 종료(terminated)된다. 

 

※  지금까지의 내용과 이후 내용이 시스템 프로그래밍에서 다뤘던 '프로세스&쓰레드'와 'IPC'의 내용과 거의 동일하기 때문에 해당 파트의 나머지 내용은 이를 참고하면 될 듯 하다.

 


  • Operating System Concepts, Avi Silberschatz et al.
  • Operating Systems: Three Easy Pieces
    • Remzi H.Arpaci-Dusseau andAndreaC.Arpaci-Dusseau
    • Available(withseveraloptions)athttp://ostep.org
반응형

'Computer Science > 운영체제' 카테고리의 다른 글

Synchronization 2  (0) 2022.04.21
Synchronization 1  (0) 2022.04.19
Scheduling 2  (0) 2022.04.12
Scheduling 1  (0) 2022.04.07
Architectural Support for OS  (0) 2022.03.17

댓글