Process 개념
Process : 현재 실행중인 프로그램
프로그램은 반드시 연속적으로 일어나야함 -> jump, 분기 instruction 때문에 바뀔 수 있음, default는 seqeuntial
Process는 5가지 별도의 공간을 가짐
text section : program code 부분
Stack : function call 과 context switch
function call : parameter 저장, return address, local 변수 등
context switch : 레지스터 값을 저장 (PC 포함) , stack pointer 저장
data section : static, global 변수 저장 -> 실행상황과 관계없이 어디서든 접근 가능한 Data
heap section(free memory pool) : 동적 할당을 위해 (malloc) -> 동적 할당 메모리 관리
stack으로 관리하는 이유?
Process in Memory (메모리 상에서 Process 모습) : Address Space(프로세스의 주소 공간)
text,data -> 고정 영역
stack 과 heap -> 가변 영역이지만 만날 가능성은 없음
Process State
프로세스 실행 과정에서 상태 변이가 일어난다.
new : process가 생성된 상태 (아직 cpu scheduling 대상은 아님) -> 실시간 system에서는 각 작업의 deadline이 정해져 새로운 process가 들어오면 자원할당이 필요하고 기존 process가 deadline을 만족시키지 못할 수 있기에 바로 scheduling 대상에 포함하지 않는다. 즉 , 기존 processe들이 deadline을 맞출 수 있는지 확인 후 scheduling 대상에 포함한다. 일반적인 os에서는 바로 편입
running : instruction이 실행되는 상태 (cpu를 잡고 일하는 중)
waiting : process가 event 발생을 기다리는 상태 (주로 I/O event)
ready : process가 할당받기를 기다리는 상태 (언제든 cpu를 할당받을 수 있는 상태)
terminated : process가 실행을 끝낸 상태( 마지막 instruction 수행 끝난 상태)
Process Control Block(PCB)
:어떤 프로세스에 대한 자료구조
kernel data structure
process state , program counter, cpu register, cpu scheduling information, memory-management information, accounting information, i/o status information
CPU Switch from Process to Process
:Multiprogramming, Multitasking을 위해 cpu를 잡고있는 process를 상태를 포장해서 저장후 다른 process 실행
Process Scheduling Queues
Job queue : process의 pointer를 갖고 있음(PCB의 pointer들)
Redy queue : CPU를 기다리는 process들이 모여있는 queue
Device queues : I/O Device를 기다리는 process들이 모여있는 queue
-> 프로세스의 상태가 변하면 queue에서 queue로의 이동이 일어남
Ready Queue and Various I/O Device Queues
1.CPU를 어떤 프로세스에게 줄지 결정
2. new -> ready 상태 변경을 결정
Schedulers
Long-term scheduler( or job schedular)
:new 에서 ready로 대상을 결정하는 schedular
-빈번하지 않게 발생하며 느리다.(seconds,minutes)
-degree of multiprogramming(현재 cpu를 이용하여 조금씩 수행중인 process 개수)를 control
Short-term scheduler( or CPU scedular)
:Ready 인 상태의 프로세스에게 어떤 scedular를 줄 것인지 결정
-매우 자주 발생하며 빨라야 한다. (mileseconds)
Addtion of Medium-term scheduling
Process는 두가지로 구분 -> process는 scheduling 입장에서 매우 중요한 정보를 가짐, 효율성을 위해 프로세스를 구분하여 관리한다.
I/O -bound process - 연산보다는 I/O에 대부분 시간 사용 (editor, hwp, massenger...), CPU를 짧게 여러번 사용
CPU-bound process - 연산에 대부분의 시간 사용, CPU를 길게 적게 사용
Context Switch
:Multiprogramming을 위해 생기는 것
CPU가 다른 process로 바뀔때 system은 이전 프로세서의 상태를 저장하고 새로운 저장된 상태의 프로세스를 불러온다.
store : regiser -> pcb
reload : pcb -> register
Context Switch Time 은 Overhead
-> 부가적인 overhead 발생
switching 시 system은 특별한 일을 수행x
하드웨어의 지원을 받음
cache flushing - cache miss over head - context switch 가 발생하면 기존 cache 내용이 필요없어서 cache를 비워버림
Provcess Creation
-Process를 만드는 주체는 다른 어떤 Process이다(shell process).
부모 프로세스는 자식 프로세스를 생성한다. -> tree 구조
프로세스는 pid(process identifier)로 식별하고 관리한다.
일반적으로 부모프로세스와 자식 프로세스는 내용적인 관계가 없다. 하지만 자식프로세스가 죽었을 때 부모 프로세스가 return 값을 받아줘야 한다.
resource를 공유하는 밀접한 관계도 있음
Execution : 부모와 자식 프로세스는 동시에 실행된다. 부모는 자식프로세스가 종료될때까지 기다린다.
Address spcae : 자식이 부모 값을 복제(default값) -> fork 하자마자의 상태는 부모와 동일
UNIX example
-fork() systemcall은 새로운 프로세스를 생성한다.
-exec() systemcall은 fork 호출 이후 프로세스의 메모리를 새로운 프로그램으로 대체한다. -> exec()가 호출되지 않으면 부모와 동일한 상태
Starting point of the child process -> 자식 프로세스가 fork() 된 시점을 정확히 알아야 함
fork() system call 이후 return 값을 받기 전에는 부모와 동일한 상태
자식 프로세스의 return value는 0이며 부모 프로세스는 자식프로세스의 pid를 return value로 갖는다.
Process Termination
process 실행이 마지막 statement실행 후 os에 프로세스 삭제 요청을 함 -> exit()
wait을 통해 자식 프로세스의 output이 부모 프로세스에 전달
프로세스 resources 는 os에 의해 deallocated
부모 프로세스가 자식프로세스의 실행을 중단시킴-> abort
- 자식 프로세스의 자원할당이 초과하는 경우
-자식 프로세스의 일이 필요없는 경우
-부모가 exit 하는 경우 os는 자식프로세스가 더 이상 작동하지 않도록 함 (cascading termination)
Interprocess Communication
Single and Multithreaded Processes
Threads
:thread(lightweight process)는 CPU utilization 의 기본단위
- program counter, register set, stack space로 구성되어 있음
threds는 code section, data section, files 내용을 공유한다.
Threads 사용의 장점
Responsiveness
- 부분적으로 blocked가 발생하거나 긴 operation이 수행되더라도 program이 계속 작동할 수 있도록 해준다.
Resource Sharing
-process를 여러개 사용한다면 address space가 독립적으로 존재하여 overhead가 크게 발생한다. 하지만 thread는 memory copy를 하지 않고 공유할 수 있다.
Economy
-프로세스를 만들고 context switch를 하는 것 보다 경제성이 뛰어나다.
Scalability(확장성)
-각 thread는 다른 프로세서에서 병렬적으로 실행될 수 있다.
User Tread
-> 가볍고 빠르다
사용자 수준 thread 라이브러리에서 수행되는 thread 관리 -> 응용프로그램에서 thread 를 생성하고 관리
-thread 생성, 스케줄링 및 관리
-kernel에서 지원되지 않음
-신속한 생성 및 관리
-단일 thread 커널을 사용하면 차단 시스템 호출을 수행하는 하나의 사용자 수준 thread로 인해 전체 프로세스가 차단됨
(OS는 해당 프로세스의 다른 thread의 존재를 모르기 때문에 CPU를 다른 프로세스에 할당합니다)
예
Kernel Thread
커널에서 지원됨
-커널이 스레드 생성, 스케줄링, 관리를 수행함: 사용자 스레드보다 느림
-차단 thread는 전체 프로세스를 차단하지 않음
-MP 기계에서 커널은 다른 프로세서의 thread를 예약할 수 있음
-여러 Thread 간에 컨텍스트 스위칭을 해야 하므로, 성능 저하가 발생할 수 있음
예
Threading Issue
'Development > OS(Operating System)' 카테고리의 다른 글
Deadlock (0) | 2023.05.09 |
---|---|
Process Synchronization(2) (0) | 2023.04.08 |
Computer System Overview2 (0) | 2023.04.01 |
Process Synchronization(1) (0) | 2023.03.30 |
CPU Scheduling (0) | 2023.03.28 |