일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- gpt
- 회귀
- ChatGPT
- LLM
- supervised learning
- LG Aimers 4th
- 해커톤
- AI
- 딥러닝
- 분류
- LG
- GPT-4
- OpenAI
- Machine Learning
- 머신러닝
- 티스토리챌린지
- regression
- LG Aimers
- 지도학습
- PCA
- 오블완
- deep learning
- Classification
Archives
- Today
- Total
SYDev
[운영체제] Chapter 3. Processes 본문
경희대학교 허선영 교수님의 운영체제 수업을 기반으로 정리한 글입니다.
Process in Memory
1. Process
- Process: 실행중인 프로그램
- Program - passive entity -> instruction의 list를 저장, disk에 위치
- Process - active entity -> memory에 올려진 program, program counter(다음 실행할 명령어의 위치 특정)& set of associated resources(cpu, memory, files)
2. Memory Layout
- Text section: program code
- Data section: (uninitialized and initialized) global variables
- Stack section: temporary data -> function parameters, return addresses, local variables
- Heap section: 동적으로 할당되는 memory 공간
- Example C program
- Stack -> main함수의 parameters(argc, agrv), main함수의 variables(values, i)
- Heap -> values가 특정하는 동적할당한 공간
- values -> 동적할당을 진행했을 때, 해당 공간을 지칭하는 ptr 변수인 values는 stack section, 실제로 할당된 공간은 heap section에 위치함
- Data -> 초기화되지 않은 데이터 x는 uninitialized data section, 초기화된 데이터 y는 initialized data section에 위치
- Text -> instructions
3. Process State
- process 실행 -> state change (OS마다 다름)
- Process State
- New: Process가 생성됨
- Ready: Instructions가 실행됨
- Waiting: Process가 event가 발생하기를 기다리는 상태
- Ready: Process가 processor에 할당되기를 기다리는 상태
- Terminated: process가 실행을 끝낸 상태
- Example
4. Process Control Block(PCB)
- Process Control Block: Representaion of a process in the operating system -> process의 information을 관리하는 data structure
- 각 process가 생성될 때마다, 고유의 pcb 생성 -> process가 완료되면, pcb 제거
- process는 cpu를 점유하다가 state의 전이가 발생하면, 진행하던 작업 내용을 모두 정리하고 cpu를 반환 -> 이대 진행하던 작업들을 모두 저장하지 않으면, 다음 자신의 순서가 왔을 때 어떤 작업을 해야할지 알 수 없음 ->> process는 cpu가 처리하던 작업의 내용들을 pcb에 저장, 다음에 다시 cpu를 점유하여 작업을 수행할 때, pcb로부터 해당 정보들을 cpu에 넘겨서 하던 작업을 진행
- Process state - running, waiting, ...
- Process counter
- CPU registers - process-centric registers의 contents
- CPU scheduling information - priorities, scheduling queue pointers
- Memory-management information - process에 할당된 memory
- Accounting inforamtion - process를 실행하고, 완료하는 데에 얼마나 걸리는지의 시간에 관한 정보, ...
- I/O status information - process에 할당된 I/O devices
- process는 자신이 사용하는 resource와 그 자원에서 수행되는 work flow로 구성 -> 이를 관리하기 위해 linux에서는 task_struct라는 자료 구조를 생성
- 리눅스는 process, thread 모두에 1대1 관계로 task_stuct가 존재
- 하나의 process 내의 threads는 동일한 PID를 공유 -> linux에서는 tgid(Thread Group ID)
- task_struct: process information, context를 관리하는 linux 자료구조
Process Scheduling
1. Process Scheduler
- Process Scheduler: CPU core에서 다음 execution을 수행할 수 있는 available process를 선택
- CPU core에서 processes 사이에서 빠르게 전환 -> CPU 사용을 극대화
2. Scheduling Queues
- Job queue: system 내에 있는 모든 processes의 집합
- Ready queue: main memory에 상주하면서 실행될 준비를 하고 기다리는 processes의 집합(state ready)
- Wait queue: event가 발생하기를 기다리는 processes의 집합(state wait)
- Example: Queuing Diagram
3. Context Switch
- Context switch: 하나의 process가 cpu를 사용중인 상태에서 다른 process가 cpu를 사용하도록 하기 위해, 이전의 process 상태(context)를 보관하고 새로운 process의 상태를 적재하는 작업
- 한 process의 context는 해당 process의 pcb에 저장
- 출처: https://ko.wikipedia.org/wiki/%EB%AC%B8%EB%A7%A5_%EA%B5%90%ED%99%98
- Context
- Context: minimal set of data by a task(process, thread, fiber, ...) -> interrupt 전에 저장, 이후 다시 해당 지점으로 복귀할 수 있어야 함
- cpu가 another process로 switch -> system must save the state(architectural state) - registers, pc -> load the saved state for the new process - registers,pc
- Context-switch time -> pure overhead - while switching, system은 useful work(user process)를 하지 못함
- OS와 PCB가 더 복잡해질수록 -> Context switch는 더 오래 걸림
- 출처: https://en.wikipedia.org/wiki/Context_(computing)
-> context switch 과정은 pure overhead
- Hyperthreading
- Intel Hyper-Threading: 1개의 core에서 2개 이상의 thread를 허용하는 기술 -> 하나의 core에서 process 2개를 처리하는 것처럼 보이게(simultaneous)
- 1개의 physical core를 2개의 logical cores처럼 사용
Hyper threading -> Parallel? vs Simultaneous?
https://www.intel.com/content/www/us/en/gaming/resources/hyper-threading.html -> parallel
https://en.wikipedia.org/wiki/Hyper-threading -> simultaneous
Operation on Processes
1. Process Creation
- Parent process create Children process -> children process는 processes의 tree 형태를 그리며, 새로운 children process를 만듦
- process는 각각 process identifier(pid)를 가짐
- Resource sharing options
- parent와 children의 resource 공유
- all resources
- subset of parent's resources
- share no resources
- Execution options
- parent와 children이 concurrent하게 동작
- parent가 children이 종료될 때까지 wait
- Address space options
- child가 parent를 복제
- child에 자체적으로 program load
- Example: UNIX
- fork() system call -> creates new process
- exec() system call -> replace the process memory space with a new program
- parent process calls wait() -> child가 종료되기까지 wait
1. fork() 호출
2. parent process는 wait() 호출하여 child process가 terminate되기까지 wait - exit 시점에 parent가 wait 상태가 아니면, zombie process가 됨
리눅스 운영체제에서는 기본적으로 32768( = 2의 15 제곱) 개의 한정된 PID를 가지며, 만약 좀비 프로세스가 빠른 속도로 쌓인다면 전체 가용한 PID 중 대부분을 좀비 프로세스가 차지하게 되어 다른 일반 프로세스의 실행을 방해하는 문제가 발생할 수 있습니다.
출처: https://velog.io/@myway00/OS-Chapter-3-Processes#%E2%91%A2-address-space-option
3. child process는 exec()으로 실행 -> exit() 종료
4. child process 종료 후, parent는 작동
2. Process Termination
- process의 last statement를 실행 -> operating system은 exit() system call을 호출하여 해당 process를 삭제할 것을 요청
- child의 status data를 parent로 반환(via wait())
- Process's resources는 os에 의해 deallocated
- parent는 abort() system call을 호출하여 children process를 terminate
- children process가 할당된 resources를 초과한 경우
- child에 배정된 task가 더이상 필요하지 않은 경우
- parent가 종료될 때, child가 지속되도록 os가 허용하지 않는 경우
- 일부 operating system은 parent가 종료되면, child가 존재하는 것을 허용 X- process terminates -> 모든 children 종료
- Cascading termination: all children, grandchildren, etc .. -> 차례대로 terminating
- termination은 os가 시작
- parent process는 wait() system call을 호출함으로써 child process의 termination을 wait -> wait() system call은 종료된 process의 status information과 pid를 반환
- wait()을 사용하지 않은 경우(parent가 wait 상태가 아닌 경우) -> zombie process
- parent가 wait()을 호출하지 않고 종료된 경우 -> orphan process
zombie process: a zombie process or defunct process is a process that has completed execution (via the exit system call) but still has an entry in the process table: it is a process in the "terminated state".
-> 종료되었으나, parent process가 wait()을 호출하지 않아, 종료되지 않은 process
orphan process: An orphan processis a computer process whose parent process has finished or terminated, though it remains running itself.
-> parent process가 종료되었으나, 계속 실행되고 있는 process
출처:
https://en.wikipedia.org/wiki/Zombie_process
https://en.wikipedia.org/wiki/Orphan_process
Interprocess Communication(IPC)
1. Interprocess Communication
- process 내부의 system - independent or cooperating
- cooperating process -> other processes에 영향을 주거나, 받을 수 있음 + sharing data
- cooperating process 사용 이유?
- 정보 공유
- 연산 속도 증가
- Modularity -> complex tasks를 smaller subtasks로 나누어 작업 -> 작업 효율 증가 (https://www.javatpoint.com/cooperating-process-in-operating-system#google_vignette)
- 편의성
- cooperating processes -> InterProcess Communication(IPC) 필요
2. Interprocess Communication Models
- Two interprocess communication models
- Shared memory
- Message passing
- kernel을 경유하여 정보를 공유하는지 여부에 따라 구분됨
- Shared memory
- processes 간에 공유하는 memory 공간을 통해서 communicate -> communication은 os가 아닌 user processes에 의해 제어
- major issue -> user processes가 shared memory에 접근하는 action을 동기화하는 mechanism이 필요 -> process의 접근 순서에 따라서 결과가 달라질 수 있음
- Message passing
- processes가 서로 공유변수를 사용하지 않고 통신
- 2개의 operations 사용
- send(message)
- receive(message)
- message size - fixed or variable
- process P & Q의 communication
- 둘 사이 communication link 필요
- send/receive를 통해 message 교환
- Physical
- Shared memory
- Hardware bus
- Network
- Logical
- Direct or Indirect(mailbox) -> high level에서는 process에 직접 message 전달 가능
- Synchronous or Asynchronous
- Automatic or Explicit buffering -> message queue를 사용할 때, buffer를 사용 -> 이 buffer를 automatic하게 사용할 것인지, 다른 방식을 사용할 것인지
참고자료
'3학년 2학기 전공 > 운영체제' 카테고리의 다른 글
[운영체제] Chapter 5. CPU Scheduling (5) | 2024.10.09 |
---|---|
[운영체제] Chapter 4. Thread & Concurrency (1) | 2024.10.01 |
[운영체제] Exercise 1 (1) | 2024.09.14 |
[운영체제] Chapter 2. Operating System Structures (0) | 2024.09.10 |
[운영체제] Chapter 1. Introduction (0) | 2024.09.10 |