CS/운영체제

Process Abstraction / 프로세스 추상화

nolzaheo 2021. 8. 27. 16:50
728x90

프로세스 정의

-실행 중인(running) 프로그램

-처리기에 할당되어 수행될 수 있는 개체

 

프로세스 구성

메모리(Code,Data,Stack) + 레지스터(Program Counter, Stack Pointer)

 

프로세스 vs 프로그램

1. 프로그램

-disk에 위치

-disk에 위치하는 실행파일(.exe)

 

2. 프로세스

-memory에 위치

-프로그램이 memory에 올라와 CPU를 할당받고 실행되고 있는 상태

 

프로세스 생성

-fork()와 같은 system call을 사용해 process를 생성

-프로그램 코드를 메모리로 로드(= 프로세스 자신의 가상주소공간으로 프로그램 코드를 로드)

*이 때 disk와의 I/O는 시간이 많이 걸리는 작업이기 때문에, 한꺼번에 전부를 load하지는 않고 가장 먼저 필요한 일부분을 우선 load한 뒤 실행 도중 나머지 code와 data를 page 단위로 나눠 load한다.

 

프로세스 상태

os는 한 번에 하나의 process만을 수행하는 것이 아니라, dispatcher라는 전환기를 사용해 여러 process를 아주 짧은 간격으로 번갈아 실행한다. dispatcher는 작업을 선정한 후 CPU를 선정된 process에 할당하는 역할을 한다.

프로세스에는 다양한 상태가 존재하며 이를 나누는 기준 또한 다양하다.

 

1. 2가지 상태로 나누는 경우 : 수행(Running), 비수행(Not Running)

2. 3가지 상태로 나누는 경우 : 실행(Running), 준비(Ready), 블럭(Blocked)

  Not Running을 Ready, Blocked로 나눔

  -실행(Running): CPU를 차지하고 있음

  -준비(Ready)(=runnable): 메모리에 있음. ready queue에 있음. run할 수 있는 준비가 된상태로,

    run을 할 조건은 충족됐지만 os가 우선순위 등을 이유로 아직 실행하지 않음

  -블록: I/O 상태. 수면상태

3. 5가지 상태로 나누는 경우 : 생성, 실행(Running), 준비(Ready), 블럭(Blocked), 종료

  생성과 종료가 추가됨

  -Ready Running : 디스패치(dispatch)

  -Running → Blocked : 사건 대기(I/O 시작)

  -Blocked → Ready : 사건 발생(I/O 종료)

4. 9가지 상태로 나누는 경우 : 생성, 메모리 상의 준비, 스왑된 준비, 메모리상의 수면, 스왑된 수면, 커널 수행, 좀비, 사용자 수행, 선점

프로세스 9가지 상태(출처:https://cpm0722.github.io/operating-system/process-abstraction)

-메모리 상의 준비(Memory Ready): 프로세스 생성 시 메모리가 충분할 경우. Kernel mode 혹은 User mode로 갈 수 있음. User mode로 가기 위해서는 선점하거나 Kernel mode를 거쳐야함

*선점(Preemption): 다른 프로세스가 사용하던 CPU를 빼앗음

-스왑된 준비(Suspend): 프로세스 생성 시 메모리가 충분하지 않은 경우. 스왑 됨. program file이 memory가 아닌 disk 내의   swap 공간으로 이동함.

-좀비(Zombie): 커널에서 exit()을 호출하여 좀비상태가 됨. 이 때 다시 살려낼 수 있음

 

Kernel 모드에서 다시 preemption을 통해 User mode로 돌아가거나 메모리 상의 수면(Memory Blocked)의 상태로 남아있을 수 있음. 이 때 Memory Blocked의 상태에서 메모리가 부족할 경우 Suspend 상태로 넘어갈 수 있다.

 

PCB 자료구조

-프로세스의 정보를 담고있는 struct형 자료구조

-프로세스마다 한 개씩 갖고있음

-프로세스 수행을 재개할 수 있도록 문맥교환 발생 시 현재상황을 PCB에 저장

-하드웨어 문맥교환이 일어나면(인터럽트 될 때) 레지스터 정보를 저장하고, 메모리 문맥교환이 일어나면 메모리와 관련된 정보를 저장함

*이 때 인터럽트로는 I/O인터럽트, timer 인터럽트 등이 있음

 

PCB자료구조 중에서 스케쥴링할 때 쓰이는 값으로는 nice와 counter등이 있음

하드웨어 문맥이 일어나면 thread_struct형 변수를 사용하고 메모리 문맥이 일어나면 mm_struct형 변수를 사용

 

728x90

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

User Mode, Kernel Mode, Interrupt  (0) 2021.08.27
OS , 커널 정의  (0) 2021.08.27
모노리틱 커널, 마이크로 커널, 하이퍼바이저  (0) 2021.08.25