- Basic memory and process structure
- 5 state of process
- PCB Concepts
- Process Scheduling
- Context Switching
- OS can create process, terminate process
- How to create Processes?
Basic memory and process structure
- 프로세스란 실행중인 프로그램으로 정의할 수 있다.
- OS는 프로세스 단위의 작업을 관리한다.
- HDD→load to memory영역 (process)→CPU 로 처리하는 일련의 과정이 time-sharing(시분할 시스템)을 통해 공유되어 있다.
Memory Layout : 메모리 레이아웃은 여러 개의 영역으로 나뉘어 진다.
< 컴파일 시 크기가 결정되는 영역 >
- Text(Code) 영역에서는 실행 가능한 코드가 저장된다. (함수, 제어문, 상수)
- Data 영역에서는 전역변수들이 저장된다. (initialized : DATA / uninitialized : BSS)
< 런타임에 메모리 할당되는 영역 >
- malloc 등의 메모리 할당으로 heap 영역이 런타임에 메모리가 채워진다.
- 함수호출해서 쌓이는 곳은 stack section이다. 임시로 데이터를 저장하는 역할을 한다.
가령, 함수인자와 반환된 주소값 그리고 지역변수들이 주로 저장된다.
이를 program in execution(process) 라 하고, OS에서 모든것을 관리한다.
5 state of process
프로세스가 실행될 때 5가지의 상태로 정의될 수 있다.
- New : 프로세스가 새로 생김
- Running : 명령어들이 실행되고있음
- Waiting : 프로세스는 이벤트 발생을 대기하고 있음 ex) I/O 실행완료, 시그널 접수
- Ready : 프로세서에 의해 프로세스가 할당되기를 기다리고 있음
- Terminated : 프로세스는 실행을 다 끝냄
- Ready → Running : OS에서 판단(cpu scheduling)해서 실행하도록 한다. (dispatch)
- Running → Ready : 너무 오래 사용하거나 다른 작업을 해야할 때 인터럽트를 넣는다. (Interrupt)
- Running → Waiting : I / O 또는 event wait 할 때 할일이 없어서 waiting queue로 가서 대기한다. (I/O completion 상태면 다시 ready → running 됨)
PCB Concepts
- PCB는 여러가지 정보를 들고있다. 해당 내용들이 구조체로 존재한다.
(Process state, Program Counter(PC), CPU register, scheduling info., Accounting info., I/O status info. ...) - PCB들은 OS가 관리한다. (P0, P1, P2, P3 ...)
- 프로세스는 하나의 스레드로 실행을 하는 것과 동일하다. (하나의 프로세스로 하나만의 태스크를 처리한다.)
- 프로그래밍의 정수는 멀티테스킹과, 멀티프로세싱에 있다.
- 멀티 프로세싱이 가능한 것 처럼, 스레드도 여러개의 스레드로 효율적이게 처리할 수 있다.
- 프로세스를 여러개 하는것보다 스레드를 더 많이 생성하는게 효율적이다. (ex. java)
Process Scheduling
- CPU는 모두 다 사용하는 경우가 잘 없다. (cpu 점유 99% 이렇게 되어있다면 뭔가 잘못이 있다는 뜻)
- multiprogramming의 이점은 CPU 활용을 극대화 시키고, 어떤 프로세스를 항상 돌려놓을 수 있다.
- CPU는 빠르게 Switching 이 이뤄져서 각각의 프로그램들에 대해 실행도중 상호작용이 가능하다.
- 시분할(time-sharing)을 통해 프로세스간에 CPU 코어를 빠르게 변경할 수 있고, 유저는 한 프로그램이 실행될 때 다른 프로그램을 실행할 수 있다는 장점이 있다.
Queing Diagrams
- 프로세스가 시스템에 들어갈 때에(또는 작업이 끝났을 때) 'Ready queue' 로 들어가서 CPU 자원을 획득한다.
- 이러한 프로세스는 'wait queue' 상태로 있으면서 이벤트가 발생하기를 기다린다.
- Device가 여러개라면 Wait queue는 여러개 일 수 있다.
- Ready queue, Wait queue 를 통해 CPU 스케쥴링을 알 수 있다. 또한 아래와 같이 링크드 리스트로 순서를 나타낼 수 있다.
- I/O : IO 처리가 끝나고 (일반적으로 I/O 처리가 가장 느리다) ready queue에 들어간다.
- time slice expired : 기다릴게 없다면 ready queue로 들어간다.
- child fork : 'New' 상태이기 때문에 child process는 ready queue로 들어간다.
- interrupt: 인터럽트가 기다리고 발생하면 ready queue로 들어간다.
Context Switching
- 컨텍스트 스위칭이란 cpu 가 다른 프로세스에 넘겨주는 과정이다.
- 컨텍스트 스위칭 하는 시간은 순수한 오버헤드 시간이다. → 하드웨어 자원에 크게 좌우된다.
- 현재 위치를 기억하고 있다가 다른 프로세스를 수행하고 나서 복원하는 과정을 이야기한다.
- 시스템은 현재 실행하고 있는 컨텍스트를 저장하고 있다가, 다른 프로세스로 변경하고 다시 돌아올 때 그 상태를 복구한다.
OS can create process, terminate process
- 프로세스 밑에 자식 프로세스를 실행시킬 수 있다.
- pid를 통해 각기 다른 프로세스를 구분한다.
- 부모와 자식 모두 concurrent 하게 실행되는 경우, 부모가 wait 하고 자식이 terminate 될 때까지 돌아가는 두가지 경우가 있다.
- 또, 부모의 프로세스를 복제하는 경우와 새로운 프로세스로 실행하는 경우 두가지가 있다.
#include <stdio.h>
#include <unistd.h>
#include <wait.h>
int main()
{
pid_t pid; // fork a child process
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork Failed");
return 1;
}
else if (pid == 0){ //child process
execlp("/bin/ls", "ls", NULL);
}
else { // parent process
wait(NULL);
printf("Child Complete");
}
return 0;
}
- 자식 프로세스를 fork를 통해 만들어주고
- execlp 를 통해 자식 프로세스에서 ls 명령어를 실행하도록 하고
- 자식이 끝날때까지 기다리고, 완료되면 child complete라고 출력할 수 있도록 한다.
- exec 시스템콜은 호출하면 프로세스의 주소 공간을 새 프로그램으로 덮어 씌운다.
- 그럼 종료는 어떻게함? → 그냥 리턴하고 끝나면 프로세스가 끝나는 거임
- 중간에 끝내고 싶다면 exit으로 해제한다.
- os 입장에서 모두 끝났으면 모든 자원들을 회수하도록 해준다.
- parent 가 child 생성을 했는데 프로세스를 끝내지않고 중간에 리턴해버리면 좀비프로세스가 됨
- parent 가 wait을 호출하지 않고 종료했다면 고아프로세스가 된다.
- daemon, background process 를 만들 때 주로 활용된다.
How to create new processes? → Fork!
- if pid == 0 이면, 자식 프로세스가 종료됨을 나타낸다.
- fork가 실행이 되었다면 같은 PCB 를 갖는 자식 프로세스에게 복사한다.
- go-to (jump)로 실행한다.
- printf 찍고, 그 이후로 프로세스가 끝난다면 os에 반납하고 레디큐에있는 child process 의 순서로 프로그램 카운터가 이동한다.
- 그리고, 자식 프로세스에서 한번 더 printf 찍고 자식프로세스 종료된다.
- fork 이후 두가지 선택이 강요된다 (continue its execution | wait)
- parent process에서 wait을 걸어줄 때, 자식프로세스 pid 찍히고 부모프로세스 pid가 찍힌다.
'CS > Operating System' 카테고리의 다른 글
[Operating System Concepts] Chapter6 Synchronization Tools (Part.1) (1) | 2023.11.04 |
---|---|
[Operating System Concepts] Chapter5 CPU Scheduling (1) | 2023.11.02 |
[Operating System Concepts] Chapter4 Thread & Concurrency (1) | 2023.10.31 |
[Operating System Concepts] Chapter3 Process (Part.2) (1) | 2023.10.29 |
[Operating System Concepts] Chapter1, 2 Introduction & OS Structures (6) | 2023.10.25 |