운영체제 3
- 프로그램과 프로세스의 차이점
- 무덤 속 프로그램, 살아 움직이는 프로세스
- PCB(Process Control Block)
- 프로세스에 대한 모든 정보
- 프로세스 상태(running, ready, waiting)
- PC, registers, MMU info, CPU time.....
- 프로세스에 대한 모든 정보
- Job Que : 하드디스크에서 메인 메모리로 들어오기 위한 줄
- Job Scheduler : long term Scheduler -> 시간이 올래걸린다.
- 메인메모리에 올라오는 프로세스가 한쪽으로 쏠리는(IO / 연산)것을 방지하기 위해 적절히 배분해준다.
- Ready Que : CPU 서비스를 받기 위한 줄(PCB Number에 따라)
- CPU scheduler : Short term Scheduler -> 시간이 잛다.
- CPU 서비스를 누가 먼저 받을 것인가?
- Device Que : 프린터 작업
- 멀티프로그래밍 : 메인메모리에 여러개의 프로세스가 올라와있는 상태
- Medium-term scheduler
- 파워포인트를 켜놓고 다른 일을 하면, 파워포인트는 메인 메모리에서 자리만 차지하고 있다.
- 대기하는 프로세스를 하드 디스크의 Backing Store로 Swapping(이동)
- 메인 메모리에 자리가 비웟다면 다시 Swapping 시켜 원위치를 시켜준다.
- 하드디스크 : 파일시스템 / Backing Store(대기하고 있는 프로세스들의 공간)
- Context Switching : CPU가 하는일 바뀌는 거 (1번 일하다가, 2번일 하는거)
- CPU Scheduling : Ready Que에서 누가 먼저 들어갈래 ?? 스케줄링
- dispatcher
- 메인메모리에 올라와있는 프로세스과 전환이 되면서 원래 작업하던 프로세스 정보를 저장하고 다음 프로세스 정보를 불러오는 것(운영체제 안에 있다.)
- Context Switching OverHead : dispatcher가 자주 발생하면 오버헤드 발생
CPU 스케줄링
-
Preemptive vs Non-preemptive : 선점(응급실에서 급한 사람이 있으면 먼저 처리), 비선점(은행 줄)
-
스케줄링하는 기준
- CPU Utilization (CPU 이용률)
- Throughput (처리율)
- Turnaround time (반환시간) process 시작 시간 부터 종료 시간까지
- Waiting time (대기시간) cpu서비스 받기 전까지
- Response time (응답시간) 첫 응답시간
-
First-Come, First-Served (FCFS)
- 자료구조 큐와 같음
- 장점 : 균일
- 단점 : 호위효과(대기자가 계속 기달린다 like 호위자 같다)
-
Shortest-Job-First (SJF)
- 실행시간이 짧은 것 부터 먼저 실행
- 가장최고의 방법이지만, 실행시간을 아는것은 예측일뿐이다. 비현실적이다. – Shortest-Remaining-Time-First - 첫 작업은 도착순서에 따라 작동하고 - 작업 중에 여러 프로세스가 도착한다면 도착한 것 중에 짧은것을 기준으로 먼저 실행 - 먼저 하던 작업은 다른 프로세스들과 경쟁
-
Priority : 우선순위에 따라 실행
- 우선순위 기준
- 내부 : time limit, memory requirement, i/o to CPU burst
- 외부 : amount of funds being paid, political factors
- 문제
- 우선순위에 밀려서 계속해서 기달리는 상태
기아
=> 해결책 : 대기시간이 늘수록 우선순위 높여줌
- 우선순위에 밀려서 계속해서 기달리는 상태
- 우선순위 기준
-
Round-Robin (RR)
- 일정시간을 기준으로 프로세스를 변경해준다
- 일정시간이 무한대면 큐처럼 작동한다
- 일정시간이 0에 수렴하면 오버해드 발생
-
Multilevel Queue
- 프로세스 그룹화 목적에 따라 다른 알고리즘 적용
-
Multilevel Feedback Queue
- 프로세스를 계속해서 돌면 다른 알고리즘을 사용하는 그룹으로 이동
- RR -> FCFS -> SJF
- CPU(PC / SP (프로그램 카운터 / 스택 포인트)) --- MMU(Base register / limit register) ---- Main Memory
프로세스 생성
- 프로세스는 프로세스에 의해 만들어진다(부모, 자식, 프로세스 트리)
- 운영체제가 부팅이 되고 나서 첫 프로세스를 만듬(유닉스는 init 이라고 한다)
- 프로세스 트리에 대한 번호 == 유니크한 번호(죽은 이후에는 다시 쓸수 있음) PPID == 부모 번호
- 새로운 프로세스를 만든다 포크한다 fork() => 시스템콜 = 부모프로세스를 복사
- 실행파일을 메모리에 가져온다 exec() => 시스템 콜
프로세스 종료
- exit() system call
- 해당 프로세스가 가졋던 모든 자원은 os에게 반환
쓰레드
- 프로그램 내부의 흐름, 맥 : 쓰레드
- 쓰레드가 빠른 시간 간격으로 스위칭 된다. => 쓰레드가 동시에 실행되는 것처럼 보인다.
- 한 프로세스에는 기본 1개의 쓰레드 - 단일 쓰레드 (single thread) 프로그램
- 한 프로세스에 여러 개의 쓰레드 - 다중 쓰레드 (multi-thread) 프로그램
- 운영체제 발전에 따라 Context Switch단위가 프로세스 -> 쓰레드
- 쓰레드 구조
- 프로세스의 메모리 공간 공유 (code, data)
- 프로세스의 자원 공유 (file, i/o, …)
- 비공유: 개별적인 PC, SP, registers, stack