“운영체제 : 아주 쉬운 세가지 이야기”를 읽으면서 핵심 내용을 정리하였습니다.
이화여대 반효경 교수님의 운영체제 강의를 듣고 복습 차원에서 책 한권을 완독해보고자 합니다.
제한적 직접 실행(Limited Direct Execution)
•
CPU 가상화를 구현하기 위한 핵심적인 기법
1. 직접 실행만으로는 부족한가?
•
직접 실행 시 운영체제가 하는 일
1.
실행하려는 프로그램을 프로세스 리스트에 추가한다.
2.
프로그램을 위한 메모리를 할당한다.
3.
프로그램을 메모리에 탑재(load)한다.
4.
argv를 사용자 스택(프로세스의 스택메모리)에 저장한다.
a.
argv : main 함수의 인자
5.
레지스터 내용 삭제
6.
call main() 실행
7.
프로그램이 종료되면 프로세스 메모리 반환
8.
프로세스 목록에서 항목 제거
•
직접 실행이란 프로그램을 CPU 상에서 바로 실행시키는 것을 말하는데 여기에는 크게 2가지 문제점이 있다.
◦
문제점 1 : 제어권
▪
어떤 프로그램이 운영체제가 원치 않는 일을 하지 않는다는 보장을 할 수 있는가?
▪
한 프로세스가 컴퓨터 하드웨어 자원은 마음대로 조작하는 경우를 방지 할 수 없음.
◦
문제점 2 : 프로세스간 전환
▪
CPU에서 어떤 프로세스가 실행 중이라는 것은 운영체제는 CPU를 가지고 있지 않다는 것이다. (운영체제 또한 프로세스 이므로)
▪
특정 프로세스가 무한 루프에 걸리면 운영체제는 어떻게 CPU제어권을 다시 가지고 올 수 있을까?
→위의 2가지 중요 문제 점을 해결하기 위해서 “제한적” 이라는 키워드가 등장 하였다.
2. 제어권 문제 해결 : User mode , Kernel mode
•
CPU는 2가지 실행 모드를 제공하여 제어권 문제를 해결하였다.
→ CPU 설계에 따라 다르지만 보통 mode bit라는 것을 활용해 2가지 모드를 구분 할 수 있다.
→ ex ) mode bit = 0 이면 커널 모드 , mode bit = 1이면 사용자 모드
1) User Mode
◦
응용 프로그램의 하드웨어 자원에 대한 접근 권한이 일부 제한됨
2) Kernel Mode
◦
운영체제가 컴퓨터의 모든 자원에 접근할 수 있게 됨
◦
특권명령어를 실행 할 수 있음
→즉, Kernel Mode 로 전환이 되었을 때 시스템을 제어 할 수 있게 됨 (운영체제 만이 하드웨어에를 컨트롤할 권리를 가짐)
3) User mode와 Kernel mode 사이를 전환하는 방법
◦
응용 프로그램에서 시스템 콜을 호출하면 시스템콜 함수 안에 어셈블리어로 구현 되어있는 trap 명령어가 실행 되어 커널 모드로 상향 조정하게 되며 운영체제의 특정 코드 부분을 실행 하게 한다.
◦
부팅 시, 커널은 trap table을 만들고 trap table 안에는 trap handler가 들어 있다. 운영 체제는 CPU에게 trap handler의 위치를 알려 주게 되고 특정 trap에 맞는 명령어를 CPU가 실행 할 수 있게 된다.
4) 실행 프로토콜
3. 프로세스간 전환 문제 해결 : Timer Interrupt
•
실행 중인 프로세스를 Timer Interrupt를 통해 다른 프로세스로 전환 시킬 수 있게 되었다.
◦
타이머 장치 : 수 밀리초 마다 인터럽트를 발생 시키는 장치 (하드웨어)
◦
인터럽트가 발생하면 현재 실행 중인 프로세스가 중단되고 인터럽트 핸들러가 실행된다.
→ 타이머 인터럽트 덕분에 프로세스간 전환이 가능하게 되었고 프로세스들은 자신만의 CPU를 가지고 있는 것 처럼 느낄 수 있게 되었다. (CPU가상화)
•
A 프로세스에서 B 프로세스로 전환되는 것을 문맥교환(context switch)이라고 한다.
•
프로세스를 전환 시킬지 말지 결정하는 정책을 스케쥴링이라고 한다.
•
실행 프로토콜
문맥교환에 걸리는 시간??
- lmbench 라는 도구를 통해 시간 측정이 가능하다.
- 현대에 와서 2~3Ghz 프로세서의 경우 1마이크로초 미만이 걸리지만 운영체제의 많은 연산과정이 메모리를 접근하는 연산이기 때문에 프로세서가 좋아 진다고 해서 시간이 극적으로 줄어들지는 않는다.
참고 자료