Notice
Recent Posts
Recent Comments
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

SYDev

[운영체제] Chapter 3. Processes 본문

3학년 2학기 전공/운영체제

[운영체제] Chapter 3. Processes

시데브 2024. 9. 24. 20:13
경희대학교 허선영 교수님의 운영체제 수업을 기반으로 정리한 글입니다.

 

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 변수인 valuesstack 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 dataparent로 반환(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 사용 이유?
    • 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 sizefixed 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하게 사용할 것인지, 다른 방식을 사용할 것인지

참고자료

 

What is "accounting information" in PCB in OS?

Answer: basically pcb (process control block )stores the information of process what kind it is ,what type of processes it is ,its function and time accounting information: provides the amount of time required by the cpu to complete the given process and t

www.quora.com

 

리눅스의 태스크 모델, 'task_struct' 자료구조

이전 글(Linux - (4))는 사용자 입장에서 프로세스와 쓰레드를 어떻게 생성하는지 살펴본 글이다. 커널에서는 이러한 객체들을 어떻게 구현하는 살펴본다.프로세스는 자신이 사용하는 '자원'과 그

velog.io

 

PCB(Process Control Block)란?

OS의 기본. Process Control Block(PCB)입니다. - 프로세스 제어 블록(Process Control Block, 줄여서 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조입니다. PCB는 운

jwprogramming.tistory.com

 

프로세스 스케줄링

프로세스 스케줄링 큐 3가지의 스케줄링 queue 스케줄링 큐에는 3가지 큐가 있다. job queue, ready queue와 wait(or device) queue이다. job queue는 시스템 내에 있는 모든 프로세스의 집합이다. ready queue는 메인

clownhacker.tistory.com

 

Message passing - Wikipedia

From Wikipedia, the free encyclopedia Technique for running a program on a computer without directly calling it In computer science, message passing is a technique for invoking behavior (i.e., running a program) on a computer. The invoking program sends a

en.wikipedia.org