Process? instruction들의 순차적인 실행이다.
누가 process를 생성하는가? 사람 -> GUI command, process -> demon process
- Two_state Process Model
프로세스로 들어오면 (Enter) Queue에 Not running 상태의 프로세스가 쌓이고 dispatch 되면 Running 상태가 되며
processor로 올라간다. 여기서 Time out(Time sharing)이 걸리면 Enter로 돌아가 다시 Queue에 쌓인다.
- Five_state Process Model
1. 프로세스로 들어오면 (Enter) New 상태가 된다. 메모리에 프로세스가 올라가는 상태여서 메모리에 공간이 있다면 이
상태를 거치는 시간이 짧지만 없다면 디스크에 있다가 Admit 되며 Ready 상태가 된다.
2. Ready 상태에서 Dispatch 되면 Running 상태, Running 에서 Time out 되면 Ready 상태로 간다.
3. Running 상태에서 I/O event가 발생하면 (Event wait) Blocked 상태로, I/O event가 끝나면 (Event occurs)
Ready 상태로 간다.
4. Running 상태에서 release 되면 Terminate 상태
- Using Two Queues
Two_state Process Model에서 Ready Queue와 Blocked Queue가 생겼다.
- Multiple Blocked Queues
event 종류마다 Queue를 만든다.
Suspended Process? 만약 메모리에 있는 프로세스들이 모두 I/O 상태 즉, wait이면 CPU 입장에선 할 일 없이 놀고 있다.
그래서 잠시 Blocked 상태의 프로세스를 디스크에 옮겨 놓는데 이런 프로세스를 Suspended Process라 한다. 옮기고 나면
디스크에 있던 다른 프로세스를 메모리에 올려 실행한다.
- Two Suspend States
Five_state Process Model의 Ready 상태는 Suspended Ready 상태와 swap한다. Ready 상태를 디스크에 옮기는 경우는
우선순위가 높은 프로세스가 디스크에 있는 경우이다. Blocked(Sleep) 상태는 Suspended sleep 상태와 swap 한다.
Suspended block 상태에서 I/O가 다 되면 Suspended Ready 상태가 된다. (아직 디스크에 있음.)
컴퓨터 시스템의 자원들에는 Memory, Devices, Files, Processes가 있고 이들이 각 저장하는 Structure는 Memory Table,
I/O Table, File tables, Primary Process Table이다. Primary Process Table 에는 모든 process들의 PCB가 있다.
PCB(Process Control Block)? 프로세스의 정보를 저장하고 있는 자료 구조이다.
프로세스가 존재할 때만 있다.
프로세스 당 PCB가 하나씩 있다.
각 프로세스에 대한 정보를 Kernel 메모리 안에 저장하는 공간이다.
PCB에는 Process identification, Processor state information이 있다. Processor state information에 Process State와
CPU registers가 있는데 Block에서 Ready->Running이 될 때 Blocke된 지점 이후부터 실행하기 위해 필요하다.
실행될 프로세스의 PCB는 CPU에 올라가고 save될 프로세스의 PCB는 메인 메모리에 저장된다.
- Process Context
context는 프로그램의 실행 환경이다.
User Context에는 Code, Data (global variables of the process), User Stack이 있다. User stack은 유저 프로그램 내에서
function들 왔다갔다 할 때 쓰인다. (LIFO) User Stack에는 호출될 함수의 local variables, 함수의 파라미터,
return address가 저장된다.
System Context (OS가 만드는 Context)에는 System Stack (Kernel Stack), PCB가 있다. System stack은 Kernel 내에서
function들 왔다갔다 할 때 쓰이고 얘도 프로세스마다 있다. -> 프로세스를 실행하면 Code 부분에서 실행하다가 예를 들어
fork() 같은 함수나 I/O 가 발생하면 kernel에서 실행한다. 그리고 다시 code로 가서 실행하는데 이러한 이유 때문에 모든
프로세스마다 kernel 영역을 가지고 있다. -> test.c 라는 파일을 만들었고 이를 gcc 컴파일하면 디스크에 header, code,
data, bss, stack 구조로 저장한다. data에는 초기화가 된 global variable, bss에는 초기화가 안된 global variable, stack에는
local variable이 저장된다. 해당 프로그램을 실행하면 new 상태에서 stack, bss, data, code (=> User Context)만 메모리에
저장되고 kernel, heap 영역이 생기며 virtual address space가 된다.
'STUDY > 운영체제' 카테고리의 다른 글
[2019.06.27] Concurrency : Mutual Exclusion and Synchronization (0) | 2019.06.27 |
---|---|
[2019.06.26] File Management (0) | 2019.06.26 |
[2019.06.25] IO Interrupt, Disk (0) | 2019.06.25 |
[2019.06.24] Thread (0) | 2019.06.24 |
[2019.06.19] Operating System (0) | 2019.06.19 |