프로세스 정의
-실행 중인(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가지 상태로 나누는 경우 : 생성, 메모리 상의 준비, 스왑된 준비, 메모리상의 수면, 스왑된 수면, 커널 수행, 좀비, 사용자 수행, 선점
-메모리 상의 준비(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형 변수를 사용
'CS > 운영체제' 카테고리의 다른 글
User Mode, Kernel Mode, Interrupt (0) | 2021.08.27 |
---|---|
OS , 커널 정의 (0) | 2021.08.27 |
모노리틱 커널, 마이크로 커널, 하이퍼바이저 (0) | 2021.08.25 |