학교생활/운영체제

[운영체제] Ch3(1)Process개념과 작동

sh1256 2022. 10. 12. 23:00
728x90

Process Concept

Process: 프로그램을 수행하는 것(멈춰있는 것이 아니라 움직이는 것-active)

 

[Process의 구성 요소]

  • text section: 소스코드(명령어)
  • program counter: cpu 안의 레지스터 값( 다음에 수행해야 할 번지수)
  • stack: 일시적인 데이터 보관 장소
  • Data section: 데이터 저장 장소1
  • Heap: 데이터 저장 장소2

한 프로그램에 여러 프로세스가 존재 가능하다. (한 설명서에 여러 사람들이 보고 만드는 것)

프로세스 저장공간

text, data: 사이즈 고정

stack, heap: 프로그램 수행 중 사이즈 늘었다 줄었다.

 

data: global variable

stack: local variable, argc, argv, 또 다른 함수 부를 때

heap: 프로그램 하다가 필요한 메모리 확보(malloc)


Process State


Process Control Block(PCB)

=task control block

프로세스를 관리하기 위한 프로세스의 정보를 담은 테이블

테이블 구성: Process state, Process number, Program counter, CPU registers, CPU scheduling information, Memory-management information, ....


Threads

프로세스vs쓰레드

프로세스는 프로그램 수행하는 것, 쓰레드는 프로세스 자원을 공유하는 것. 

 

한 프로세스 안에 여러 쓰레드가 있을 수가 있다. 

 

멀티 프로세스X << 쓰레드b

1.하나의 프로그램을 여러개의 프로세스가 수행할 수는 있다.

2. 하지만 그렇게 하면 Interprocess Communication을 하면 overhead가 일어나기 쉽다.

3.그래서 같은 프로그램을 수행할 때 일반적으로는 하나의 프로세스를 만들고,

4. 그 프로세스 안에 여러개의 쓰레드를 만들어 동작하게 한다. 


Process Scheduling(나중에 자세히)

프로세스가 여러개 있기 때문에 언제 어떤 프로세스가 CPU에서 수행하게 될 것인지를 정해 주어야 한다.

--> 그 일을 Proess scheduler가 해줌

  • ready queue: CPU를 기다리는 queue
  • wait queue: I/O or Event를 기다리는 queue 

queuing diagram

Context Switching

A context switch occurs when the CPU switches from one process to another.

CPU가 다른 프로세스로 전환될 때 시스템은 이전 프로세스의 상태를 저장(save)하고 Context Switching를 통해 새 프로세스를 위해 저장된 상태를 로드(reload)해야 합니다.

 

Multitasking in Mobile Systems

multitasking: CPU시간을 쪼개서 쓰는 것

현존하는 Mobile은 모두 Multitasking을 지원한다. 

 

foreground process: 화면(사용자와의 intersection O)

background process: 화면에 나타나지 않은 back 상태(사용자와의 intersection X)

 

안드로이드는 foreground와 background 사이에 service를 만듬 (화면은 다른 걸 보는데 음악을 듣는 것 같은)


Operation os Processes

1. Process Creation

parent process는 일을 시키기 위해 fork를 통해서 chile process를 만든다.(parent process 복제)

(혼자 수행하는 것보다는 여럿이서 하는 게 빨라서)

프로세스들을 구별하기 위해 process id를 갖는다.

이 때 child들을 concurrently하게 수행한다. 

fork 한 후에 child에게 exec()를 통해 다른 프로그램을 수행하게 할 수 있다.

  • fork(): system call은 새로운 프로세스(child)를 생성한다.
  • exec(): system call은 fork()후에 다른 프로세램을 시킨다.
  • parent가 child를 끝나길 원하면 wait()를 부른다.

2. Process Termination

exit()를 써서 프로그램을 종료시킬 수 있다. 

parent는 child를 여러가지 문제로 인하여 종료시키켜야 할 때 abort()로 종료시킬 수 있다. 

 

cascading termination: parent가 종료될 때, 모든 child가 같이 종료되는 것.

zombie: parent가 wait()을 하지 않으면 child는 종료되지 않고 남아있게 되는 상태

orphan: parent가 wait()하기도 전에 종료될 때의 child는 orphan이 된다.