[운영체제] Ch3(1)Process개념과 작동
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
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이 된다.