본문 바로가기

STUDY/운영체제

[2019.06.20] Process

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