<목적>
- 프로세스의 개별 구성 요소를 식별, OS에서 이러한 구성요소의 표시와 예약되는 방식을 설명
- OS에서 프로세스가 생성되고, 종료되는 방법을 설명
- 공유 메모리 및 message passing을 사용하는 프로세스 간 통신을 설명, 대조
1. Process
Process : 실행 중인 프로그램. process는 순차적으로 진행되어야 한다.
-> Active process : 실행 파일이 Memory에 로드된 상태, 마우스 클릭 등을 통해 프로그램 실행 시작
-> Passive process : 디스크에 저장된 수동 엔티티(실행 파일)인 상태
-> process의 다중 부품
(1) Text section : 프로그램 코드
(2) Program counter(PC) : 현재 주소값, PC를 포함한 현재 활동들을 담고 있다.
(3) Stack : 임시 데이터(temporary data)를 포함한다.
(4) Data section : 전역 변수가 들어 있다.
(5) Heap : 실행 시간(run-time) 동안 동적으로 할당된 메모리를 포함한다.
-> 하나의 프로그램이 여러 process가 될 수 있다. 동일 프로그램을 사용하는 다중 사용자 고려
-> stack : 지역 변수 관리, heap : 동적 할당, data : 전역 변수 관리, text: compile된 명령어
-> 모든 프로세스는 memory segment를 가지고 있다.
2. Context Switching
<When to Switch a Process?>
OS가 CPU를 제어할 수 있을 때마다 process switch가 발생할 수 있다.
(1) Supervisor Call : 프로그램의 명시적 요청(ex - 파일 열기)에 의해 프로세스가 차단될 수 있다.
(2) Trap : 비정상적인 종료. 오류 등으로 인해 process가 종료 상태로 이동한다.
(3) Interrupt : 현재 명령의 실행 외부에서 원인이 발생. 컨트롤이 IH로 전송된다.
<Examples of interrupts>
(1) Clock : 프로세스가 time slice를 만료하고, 준비 상태(ready state)로 전환된다.
(2) I/O [입출력]
먼저 I/O를 기다리는 process를 준비 상태(ready state) 또는 일시정지 상태(ready suspend state)로 이동.
실행 프로세스를 다시 시작하거나, 우선 순위가 높은 프로세스를 선택한다.
(3) Memory fault [메모리 오류]
메모리 주소는 가상 메모리에 있으므로, 해당 블록을 기본 메모리로 가져와야 한다.
이 프로세스를 차단 상태(blocked state)로 이동한다. I/O가 완료될 때까지 대기한다.
-> 이런 경우, process manager로 바로 간다.
<Mode Switching for Interrupt Handling>
interrupt로 인해 [process switch]가 생성되지 않을 수도 있다.
or 컨트롤이 중단된 프로그램으로 돌아갈 수 있다.
-> Mode Switching : processor의 상태 정보만 스택(Stack)에 저장하면 된다.
-> Mode Switching : IH로 전환할 때 user mode에서 kernel mode로 전환
모드 전환을 사용하면, 오버헤드(overhead)가 감소한다.
-> 즉, 프로세스 전환과 같이 PCB를 업데이트할 필요가 없다.
[14쪽 사진 이해 좀 해보자]
<Context Switching>
CPU가 다른 프로세스로 전환되면 --> system이 이전 프로세스의 상태를 저장하고
--> context switch를 통해 새 프로세스에 대해 저장된 상태(saved state)를 로드
(*) 여기서 context란? PCB에 나타나는 프로세스
(1) Context switch time은 overhead이다. 전환하는 동안 system이 유용한 작업을 수행하진 않는다.
OS와 PCB가 복잡할수록 컨텍스트 전환이 길어진다.
(2) 하드웨어 지원에 time dependent하다.
어떤 하드웨어들은 한 CPU에 여러 set의 register들을 제공한다. -> 한번에 여러 context 제공~
3. Process State
(1) New : 프로세스가 생성된다 !!
(2) Running : 명령이 실행되고 있다 !!
(3) Waiting : 프로세스가 일부 이벤트가 발생하기를 기다리고 있다 !!
(4) Ready : 프로세스가 프로세서에 할당되기를 기다리고 있다 !!
(5) Terminated : 프로세스 실행이 완료되었다 !!
4. How to create a User Process
A process can create a process
-> Fork() : 새 PID를 사용하여 현재 프로세스의 복사본을 만든다. 즉 new process를 형성
-> Fork()의 반환값은 정수다.
When > 0 : 그대로 상위 프로세스 실행, 반환값은 새 자식의 pid
When = 0: new Child 프로세스 실행
When < 0 : 오류 !! 어떻게든 처리해야 한다 !! 부모 및 자식 모두에서 원래 프로세스의 모든 상태가 중복됨
-> exec() : 프로세스의 메모리 공간을 새 프로그램으로 바꾸기 위해 fork() 뒤에 사용
-> wait() : 자식이 종료될 때까지 상위 프로세스에서 대기한다.
<UNIX Process Management>
(1) UNIX fork : 현재 프로세스의 복사본을 만들고, 실행을 시작하기 위한 시스템 호출
(2) UNIX exec : 현재 프로세스에서 실행 중인 프로그램을 변경하기 위한 시스템 호출
즉, 다른 프로그램 돌리고 싶다 ~~ 클론에서 copy해두고, 내장된 몸체만 바꾸면 된다.
참고로 반드시 child process가 먼저 죽어야 한다. -> 안 그러면 좀비 프로세스 발생
(3) UNIX wait : 프로세스가 완료될 때까지 대기하는 시스템 호출
(4) UNIX signal : 다른 프로세스로 알림을 보내기 위한 시스템 호출
(5) UNIX man pages : 유닉스 관리 페이지, fork(2), exec(3), wait(2), signal(3) 뭐징 이게
<Process creation>
parent 프로세스는 children 프로세스를 생성, 이 프로세스는 다른 프로세스를 생성하여 프로세스 트리를 형성
일반적으로 PID(프로세스 식별자)를 통해 프로세스를 식별하고 관리한다.
자원 공유 옵션 : 서로 모든 것을 공유, 자식이 부모것의 일부를 공유, 서로 자원을 공유하지 않음
실행 옵션 : 부모와 자식이 동시에 실행됨, 부모는 자식이 종료될 때까지 대기함
주소 공간 : 자식이 부모의 것을 복제, 자식 프로세스에 프로그램이 로드되어 있다.
5. Process Termination
(1) 프로세스는 마지막 줄을 실행한 다음, exit() 시스템 호출을 사용하여 OS에게 삭제를 요청한다.
wait()를 통해 자식에서 부모로 상태 데이터를 반환한다.
프로세스의 자원이 OS별로 할당 해제된다.
(2) 부모는 abort() 시스템 호출을 사용하여 자식 프로세스의 실행을 종료할 수 있다.
그 이유 : 자식이 할당된 자원 이상을 사용, 자식의 task가 더 이상 필요 X, 부모 프로세스가 종료되는 중
(3) Cascading termination[계단식 종료] : 모든 자녀, 손주 등은 종료된다.
(4) 상위 프로세스는 wait() 시스템 호출을 사용하여 하위 프로세스가 종료될 때까지 기다릴 수 있다.
system call은 종료된 프로세스의 상태 정보, PID를 반환한다.
pid = wait(%status);
(5) zombie : 대기 중인 부모가 없는 경우, 즉 wait()를 호출하지 않은 경우
orphan : 고아. wait()를 호출하지 않고 부모 프로세스가 종료된 경우
6. Process Control Block(PCB)
각 프로세스와 관련된 정보를 포함하고 있다. task control block.
-> Process state : running, waiting 등의 상태를 저장
-> PC : 다음에 실행할 명령의 주소값, 위치를 저장
-> CPU registers : 모든 프로세스의 중심적인 내용
-> CPU scheduling : 프로세스 간의 우선 순위, 스케줄링 queue 포인터
-> Memory-management information : 프로세스에 할당된 메모리를 관리
-> Accounting information : 사용된 CPU, 시작 후 경과된 clk time, 시간 제한 등
-> I/O status information : 프로세스에 할당된 I/O 장치, 열려 있는 파일 목록
<Thread>
프로세스는 최소 한 개 이상의 스레드를 가진다.
IF 프로세스 당 여러 개의 PC를 가진다면, 여러 위치에서 동시에 실행 가능, 스레드 여러 개 제어 가능
-> PCB에 스레드 세부 정보, 여러 PC를 저장할 수 있는 저장소가 필요
<Process Scheduling>
CPU의 사용을 극대화하고, 프로세스를 CPU core로 신속하게 전환한다.
CPU core에서 (다음 실행을 위해) 사용 가능한 프로세스 중에서 선택
(1) Ready queue : 메인 메모리에 상주하는 프로세스 집합. 실행을 위한 준비 및 대기
(2) Wait queue : event(예를 들어 I/O)를 대기하는 프로세스 집합
-> 프로세스는 다양한 큐들 사이에서 이동한다.
7. Multitasking in Mobile systems
일부 모바일 시스템은 하나의 프로세스만 실행하도록 허용한다. 다른 프로세스는 일시중단된다.
(1) IOS : screen real estate 때문에 다음과 같다.
-> Single foreground process : 사용자 인터페이스를 통해 제어
-> Multiple background process : 메모리에, 실행 중이지만 디스플레이엔 표시되지 않음. 제한이 있음
(2) Android : 더 적은 제한으로 fore, back ground를 실행한다.
-> 백그라운드 프로세스에서 service를 사용하여 작업 수행
-> 백그라운드 프로세스가 일시중단된 경우에도 service가 계속 수행될 수 있다.
-> service에 사용자 인터페이스가 없고, 메모리 사용량이 적다.
<in Multitacking OS.. problem>
-> 메모리는 여러 프로세스를 보유한다.
-> 하나의 프로세스가 차단되었을 때 다른 프로세스로 이동이 가능하다.
-> 프로세서가 I/O보다 훨씬 빠르기 때문에, 멀티프로그래밍을 사용하더라도 프로세서는 시간이 남는다.
<how to solve>
(1) 메인 메모리를 확장하여 더 많은 프로세스를 수용할 수 있다.
But 관련 비용이 들고, 메모리가 커질수록 용량이 커진다는 문제점 존재
(2) swapping : 프로세스의 일부 또는 전체를 이동하는 방법
메인 메모리에서 디스크로, (메인 메모리에 있는 프로세스가 하나도 없을 때) 이동한다.
기존 프로세스의 queue가 있는데, 일시중단됨. OS는 queue를 중단하거나 -> 다른 프로세스 가져옴 ~~
이것은 I/O 작업이므로 상황을 더 악화시킬 수 있는 잠재적인 문제 존재. 뭐 그래도.. 성능 향상시켜줌
8. Process suspension
프로세스를 즉시 실행할 수 없다.
agent(자체 or 부모 프로세스 or OS)가 실행을 방지하기 위해 프로세스를 일시 중단 상태로 전환했다.
프로세스가 이벤트를 대기 중이거나 대기 중이지 않을 수 있다. (?)
agent가 제거를 명시적으로 명령하기 전까지 프로세스는 이 상태를 유지한다.
<suspend해야 하는 몇가지 경우>
(1) Swapping : OS는 실행할 준비가 된 프로세스에게 충분한 메인 메모리를 줘야 한다.
-----> Swapping ㅇㅇㅇ
(2) Other OS reason : OS가 문제를 감지하거나 의심할 경우, 프로세스가 일시 중단될 수 있다.
(3) Interactive user request : 사용자가 디버깅, 자원의 사용 등의 이유로 프로그램 일시정지를 원한다.
(4) Timing : 프로세스는 주기적으로 실행된다. 다음 시간 구간을 기다리면서 일시정지할 수 있다.
(5) Parent process request : 부모 프로세스는 여러 자손들의 활동을 조정할 수 있다.
(*) 프로세스들이 자원을 많이 공유, 동시에 작동하면 critical section[자원 공유 충돌]이 발생할 수 있다.
'KNU_study > 운영체제' 카테고리의 다른 글
운영체제(6) Synchronization Tools & Examples (0) | 2023.06.12 |
---|---|
운영체제(5) CPU Scheduling (1) | 2023.05.18 |
운영체제(4) Thread (0) | 2023.05.18 |
운영체제(2) Operating-System Structures (0) | 2023.05.16 |
운영체제(1) OS (0) | 2023.05.10 |