Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Operating System
- Segmenation
- C언어
- Fair-Share Scheduling
- MLFQ
- Round robin
- STCF
- 컴퓨터 구조
- 어셈블리
- 프로그래밍언어
- scheduling
- 스케줄러
- SJF
- 문법
- 운영체제
- System Call
- sceduling
- FIFO
- 프로그래밍
- virtual memory
- PIM
- 컴퓨터
- Computer Architecture
- computer architercure
- scheduler
- Process
- Process in Memory
- DRAM
- Stride scheduling
Archives
- Today
- Total
Nyong!
3. Scheduling (1) - system call, interrupt, context switching 본문
Study/Operating System
3. Scheduling (1) - system call, interrupt, context switching
신뇽! 2022. 2. 10. 23:33CPU 가상화
여러개의 프로세스들이 하나의 CPU를 공유(time sharing)
- 최소한의 performance overhead를 가져야 함.
- 프로세스를 실행하면서 시스템의 안전을 보장해야함.
CPU 가상화의 여러가지 방안을 차례로 살펴보면서 그 장단을 분석해본다.
Direct Execution (Unrestriced Execution)
말 그대로 프로그램이 CPU 상에서 아무 제약없이 실행된다.
장점 : CPU에서 프로그램이 natively 실행되기 때문에 가장 효율적이다.
단점 : 프로세스가 실행되는 동안 OS는 CPU의 control을 완전히 잃는다. 실행 중인 process가 악의적이거나 허용되지 않은 동작을 수행하여도 OS가 막을 수 없다.
User mode & Kernel mode
Direct Execution에서 확인한 단점을 해결하기 위하여, user program이 할 수 있는 행동에 제한을 둔다.
- User mode : 프로세스는 hardware에 제한된 접근 권한을 갖는다. 허용되지 않은 access를 실행하면, exception이 일어나고 OS는 해당 process를 종료(kill)한다.
- Kernel mode : OS가 hardware에 자유롭게 접근할 수 있다.
System Call
- 유저 프로그램은 privileged opration을 요청하기 위해 system call을 invoke한다.
- OS는 trap table을 이용하여 invoked된 system call을 확인하고, system call function으로의 pointer를 관리한다.
- trap table은 boot time에 만들어진다.
- 유저 프로그램은 system call을 invoke하기 위해 trap instruction을 실행한다.
- trap이 호출되면, OS는 kernel mode로 바뀌고, CPU는 trap table의 메모리 주소로 점프한다.
- system call은 trap table에서 확인되고, kernel모드에서 실행된다.
- system call이 종료되면 OS는 return-from-trap instruction을 호출하여 user mode로 돌아가고, 실행되던 user program 계속 실행한다.
- Boot time
- OS : trap table 초기화
- hardware : trap handler 주소 저장
- Run time
- OS : 프로세스 생성
- program : main 실행, system call 호출, trap 실행
- hardware : 레지스터 kernel stack에 저장, kernel mode로 변경, trap handler로 jump
- OS : system call 실행, return from trap 호출
- hardware : kernel stack에서 레지스터로 읽어옴, user mode로 변경, return address로 jump
- program: main 함수 종료, exit() system call 호출
- OS : process memory 해제, memory에서 process 삭제
System call vs. Function call
system call 과 function call은 생긴건 유사하지만 다르다.
- System call은 trap instruction을 이용하여, kernel mode로 전환하는 추가적인 과정이 필요한 반면. Fuction call은 user mode에서 실행된다.
- System call은 I/O request와 같은 priciledged operation을 실행할 수 있다.
- System call은 overhead가 더 크다.(느리다)
- System call은 system call function을 실행하기 위해 kernel stack을 이용한다. Funtion call은 user stack을 이용한다.
Cooperative Switching
프로세스가 CPU에서 실행되고 있으면, OS는 CPU에 접근할 수 없다는 것이다.
Cooperative switching이란,
- OS는 user process를 신뢰한다.
- OS는 user process가 system call을 주기적으로 호출하여 CPU의 control을 OS에게 넘길 것이라고 가정한다.
- 한 예시로, 컴파일러가 user program에 yield() system call을 집어 넣는다면, user program이 주기적으로 system call을 호출하여 OS에게 CPU를 넘겨줄 수 있게 된다.
- OS가 user program이 system call을 호출하여 OS에게 CPU의 control을 넘겨주기를 기다리는 것을 cooperative switching이라고 한다.
Misbehaving Applications(in cooperative switching)
- Trap and kill
- illegal operation은 (ex. user mode인 상태로 system memory 접근 시도) trap을 발동시킨다.
- OS는 해당 프로세스를 죽인다
- Undetected corner cases
- user program이 무한 루프를 돈다면 OS는 user program으로부터 CPU control을 돌려받을 수 없다.
Timer Interrupt
Cooperative switching은 수동적인 접근 방식으로, corner case가 존재한다.
대신, timer interrupt를 이용하여 실행중인 프로세스를 멈추고 OS가 CPU control을 가져온다.
Interrupt handler를 이용하여 interrupt를 관리한다.
- Boot time에, OS는 하드웨어에게 interrupt가 발생했을 때 어떤 동작을 할지 알려준다.
- OS는 boot하면서 타이머를 초기화한다.
- Timer interrupt가 발생하면, 하드웨어는 현재 실행되던 프로세스를 저장하여 return-from-trap instruction 이후에 프로세스가 계속 실행 될 수 있게 한다.
Trap vs. Interrupt
Trap | Interrupt |
user program에 의해 신호 발생 | 하드웨어에 의해 신호 발생 |
OS의 해당 trap의 기능을 발동 | CPU에게 interrupt handle을 강제 |
Interrupt의 일부 | Trap을 포함 |
Context Switching
- Timer interrupt 혹은 system call이 처리되고 난 뒤, OS가 기존에 실행되던 프로세스를 실행하거나 새로운 프로세스를 실행할 수 있다.
- 이때 새로운 프로세스를 실행하는 것을 context switching이라고 한다.
- Context switching이 일어나면, 기존의 프로세스의 정보는 메모리에 저장하고 새로운 프로세스를 CPU에 올린다.
- Boot time
- OS : trap table 초기화
- hardware : trap table handler와 timer handler 주소 저장
- OS : interrupt timer 시작
- hardware : every x ms마다 interrupt
- Run time
- program : Process A 실행
- hardware : timer interrupt 발생, process A의 레지스터 stack에 저장, kernel mode로 변경, trap handler로 jump
- OS : trap 처리, context switch 발생, return-from-trap 호출
- hardware : 레지스터에 process B의 정보 불러옴. user mode로 변경, process B의 PC로 jump
- program : Process B 실행
'Study > Operating System' 카테고리의 다른 글
8. Threads and Race condition (0) | 2022.02.17 |
---|---|
5. Scheduling(0) - Long/Short/Medium scheduler (0) | 2022.02.11 |
4. Scheduling (2) - Job Scheduling (0) | 2022.02.11 |
2. Process (0) | 2022.02.09 |
1. Introduction (0) | 2022.02.09 |