개요
- 운영체제는 자원 관리자로서 CPU, 메모리, 및 디스크 같은 시스템의 자원을 효율적으로 관리하는 역할을 지니고 있음
- 보통 응용 프로그램이 사용가능한 수백 개의 시스템 콜을 제공함
운영체제는 어떻게 자원을 가상화하는가? 가상화 효과를 얻기 위해 운영체제가 구현하는 기법과 정책은 무엇인가.
운영체제는 이들을 어떻게 효과적으로 구현하는가.
CPU 가상화
- 여러개의 CPU가 존재하는 것 처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것
- 프로그램에서 사용하는 명령을 운영체제에 알려주기 위해서는 API 가 필요함
메모리 가상화 (Virtualizing memory)
- 각 프로그램이 물리 메모리를 다른 프로그램과 공유하는 것이 아니라 각자 메모리를 가지고 있는 것 처럼 보이게 하는 것
- 각 프로세스는 자신만의 가상 주소 공간을 가짐
- 운영체제는 가상 주소공간을 물리 메모리로 (mapping 함)
병행성(concurrency)
- 프로그램이 한 번에 많은 일을 할 때 발생하는 일, 반드시 해결해야 하는 일
- 어떤 명령어가 atomically 하게 수행되지 않을 경우 발생할 수 있는 문제(멀티 쓰레딩)
핵심 질문
같은 메모리 공간에 다수의 쓰레드가 동시에 실행한다고 할 때, 올바르게 동작하는 프로그램을 어떻게 작성할 수 있는가? 운영체제로부터 어떤 기본 기법들을 제공받아야 하는가? 하드웨어는 어떤 기능을 제공해야 하는가? 병행성 문제를 해결하기 위하여
기본 기법들과 하드웨어 기능을 어떻게 이용할 수 있는가?
- 상호 배제 (Mutual Exclusion): 여러 개의 쓰레드가 같은 자원에 동시에 접근하지 못하도록 하여 충돌을 방지
- 뮤텍스 (Mutex) 나 세마포어 (Semaphore) 와 같은 동기화 기법을 사용 할 수 있음
- 교착 상태 (Deadlock) 방지: 두 개 이상의 쓰레드가 서로 자원을 기다리는 상태로 빠지는 것을 방지하기 위해, 모든 쓰레드가 자원을 순서대로 요청하도록 하는 등의 방법 사용 가능
- 경쟁 상태 (Race Condition) 방지
- 여러 쓰레드가 같은 자원에 접근할 때 실행 순서에 따라 결과가 달라지는 문제를 방지하기 위해 특정 구간에서는 하나의 쓰레드만 실행할 수 있도록 하는 등의 방법 사용가능
- 멀티코어 프로세서, 캐시 일관성
영속성(persistence)
- DRAM 과 같은 장치는 데이터를 휘발성(volatile) 방식으로 저장하기 때문에 데이터가 쉽게 손실될 수 있음
- 데이터를 디스크에 쓰기 위해서 운영체제가 하는일을 생각보다 쉽지 않음
- 파일 시스템이 관리하는 자료 구조를 통하여 데이터의 상태를 추적하고, 기존 자료구조를 읽거나 갱신해야 함
- 쓰기 중에 시스템의 갑작스런 고장에 대비해서 저널링이나 쓰기 복사와 같은 기법을 사용함
- 효율적인 디스크 작업을 위해 링크드 리스트에서 복잡한 B-트리까지 다양한 종류의 자료 구조를 사용함
설계 목표
운영체제가 하는 일
- 물리 자원을 가상화 한다.
- 병행성과 관련된 복잡한 문제를 처리함
- 파일을 영속적으로 보관해 아주 오랜 시간 동안 안전한 상태에 있게 함
목표
- 쉽게 만드는데 필요한 개념들을 추상화 함 (OSI 7계층도 마찬가지)
- 큰 프로그램을 이해하기 쉬운 작은 부분들로 나누어 구현
- 오버헤드를 최소화
- 응용 프로그램간의 보호
- 한 프로그램의 악의적인 혹은 의도치 않은 행위가 다른 프로그램에게 피해를 주지 않는 다는 것을 보장
- 운영체제의 원칙 중 하나인 고립(isolation) 원칙의 핵심.
- 높은 수준의 신뢰성(reliability) 제공
배경
- 초창기 운영체제: 단순 라이브러리
- 라이브러리를 넘어서: 보호
- 모든 프로그램이 디스크의 원하는 위치를 읽을 수 있으면 문제가 심각해짐, 개인정보의 보호가 불가은해짐
- Atlas 컴퓨팅 시스템에 의해 시스템 콜이라는 아이디어가 발명됨
- 시스템 콜은 보통 trap 이라 불리는 특별한 하드웨어 명령어를 이용하여 호출됨
- trap hanlder 함수에게 제어권을 넘기고 특권 수준을 커널 모드에서 실행함
- 서비스를 완료하면 return-from-trap 명령어를 사용해 제어권을 다시 사용자에게 넘김
- 멀티프로그래밍 시대
- 한번에 여러개의 프로그램을 실행시킴
- 메모리 보호
- 병행성
- 한번에 여러개의 프로그램을 실행시킴
- 현대
- 초기에는 PC의 등장이 운영체제 기술을 퇴보시킴
- 암흑기가 지난 뒤 미니컴퓨터 운영체제 기법들이 테스크톱 컴퓨터용 운영체제에 등장
'운영체제' 카테고리의 다른 글
[OSTEP-9] Lottery Scheduling (0) | 2023.12.26 |
---|---|
[OSTEP-8] Multi Level Feedback Queue (1) | 2023.12.26 |
[OSTEP-7] 스케줄링 (0) | 2023.12.26 |
[OSTEP-6] Limited Direct Execution (1) | 2023.12.23 |
[OSTEP-5] Process API (0) | 2023.12.23 |