1.Context란?
CPU가 프로세스를 실행하기 위해서 필요한 프로세스에 대한 정보
이 프로세스의 Context를 커널내부에 존재하는 PCB(Process Control Block)에 저장
즉, CPU가 프로세스를 실행하기 위해서 PCB에서 context를 읽어서 레지스터값 변경
*PCB 구조
프로세스 식별자(Process ID) | |
프로세스 상태(Process State) | 생성(create), 준비(ready), 실행 (running), 대기(waiting), 완료(terminated) |
프로그램 계수기(Program Counter) | 이 프로세스가 다음에 실행할 명령어의 주소 |
사용 중인 레지스터 정보 | |
CPU 스케줄링 정보 | 우선 순위, 최종 실행시각, CPU 점유시간 등 |
메모리 관리 정보(Memory limits) | 사용 가능한 메모리 공간 정보 |
입출력 상태 정보 | 프로세스에 할당된 입출력장치 목록, 사용 파일 목록 등 |
포인터 | 부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보 |
2. context-switching(문맥교환)이란?
CPU가 실행하는 프로세스가 교체될 때 CPU에서 관리하는 Context가 교체되는 것
인터럽트가 발생하면, 프로세스를 종료하고 다음 프로세스를 수행
이때 종료될 프로세스의 context를 PCB에 업데이트하고, 실행할 다음 프로세스의 context를 메모리에 올려서 CPU가 실행할 수 있도록 해 줌.
하지만, Context Switching일 때 해당 CPU는 아무 일을 할 수 없어서 오버헤드발생(성능저하)
*context-switching이 발생하는 인터럽트
1. 입출력 요청이 왔을떄
2. cpu사용시간이 만료되었을때
3. 자식프로세스를 만들때
4. 인터럽트 처리를 기다릴때
3. 스케쥴러
context-switching을 하는 주체
인터럽트가 발생했을 때 수행할 다음 프로세스를 결정함
사실은 하나씩 처리하는데 시분할(Time-slicing)을 통해서 동시에 수행하는 것처럼 보임
다음 프로세스를 결정하는 우선순위 알고리즘(CPU스케쥴링)
*CPU 스케줄링 : 메모리에 Ready상태의 프로세스 중 하나를 선택해서 CPU자원할당
1) 비선점 스케줄링 : 이미 할당된 CPU를 다른 프로세스가 강제로 뺏아서 할당할 수 없음
FCFS(First Come First Service) | 가장 먼저 들어온 순서대로 CPU를 할당 |
SJF(Shortest Job First) | 실행시간이 가장 짧은 프로세스에 먼저 CPU를 할당 |
HRN(Highest Response ratio) | 우선순위 계산값 = (대기시간 + 서비스시간 / 서비스시간) 이 높은 것부터 CPU 할당 |
기한부(DeadLine) | 프로세스에게 일정한 시간을 주어 그 시간 안에 프로세스를 완료하도록 하는 기법 |
우선순위(Priority) | 각 프로세스마다 우선순위를 부여하여 그 중 가장 높은 프로세스에게 먼저 CPU를 할당 |
2) 선점 스케줄링 : 우선순위가 높은 프로세스를 CPU가 강제로 뺏아서 할당할 수 있음
RR(Round Robin) | 대기 큐를 사용하여 먼저 대기한 작업이 먼저 CPU를 사용 |
SRT(Shortest Remaining Time) | 프로세스의 실행시간이 가장 짧은 프로세스에게 CPU를 할당 |
선점 우선순위 | 우선순위가 가장 높은 프로세스에게 먼저 CPU를 할당 |
다단계 큐 | 그룹에 따라 각기 다른 준비상태 큐를 사용 |
다단계 피드백 큐 | 특정 그룹의 준비상태 큐에 들어간 프로세스가 다른 준비상태 큐로 이동 가능 |
3.멀티프로세스
context-switching에 의해서 멀티프로세스 가능
하나의 프로그램을 여러 개의 프로세스로 구성해서 CPU가 일을 처리함
CPU는 하나인데 여러 프로세스가 동시에 실행되는 것 처럼 보임
<비유>
TV보면서, 전화하면서, 컴퓨터를 동시에 하지만 실제로 뇌(CPU)에서는 하나씩 처리하듯이
context-switching이 자주 일어나면 부하가 발생함
메모리와 레지스터 사이의 데이터이동으로 IO가 자주 발생하기 때문에
context-switching을 하면서 PCB를 저장하고 가져올 때 CPU가 아무런 일도 하지 못하기 때문에
따라서 실행되는 프로세스가 많고, context-switching이 자주 일어나면 성능이 떨어진다
출처
https://velog.io/@sohi_5/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Context-Switching-suaduxev
https://slenderankle.tistory.com/196
https://ggodong.tistory.com/27
https://www.crocus.co.kr/1364?category=268776
'🌱 Computer Science > OS' 카테고리의 다른 글
[Linux 명령어] ping : 서버 상태확인 (0) | 2020.05.14 |
---|---|
[Linux 명령어 ] uptime : load average 확인 (0) | 2020.05.13 |
[Linux 명령어] arp : MAC주소와 IP주소확인 (0) | 2020.05.11 |
[OS] 프로그램 vs 프로세스 vs 스레드 (0) | 2020.05.10 |
[OS] 운영체제(Operating System) 개념정리 (0) | 2020.05.10 |
[linux 명령어] htop : 시스템 실시간 모니터링(top보다 업그레이드) (0) | 2020.05.09 |