Operating System Services
- User interface
CLI(Command-Line Interface), GUI(Graphical User Interface), 그리고 Batch Interface로 나눌 수 있다.
- Program execution
시스템은 프로그램을 메모리에 로드하고 실행하며 끝낼 수 있어야 한다.
- I/O operation
프로그램이 입출력을 필요로한다면, 운영체제는 명령을 수행해야 한다.
- File-system manipulation
파일을 읽고, 쓰고, 만들고, 지운다. 사용자가 파일에 접근하지 못하도록 막기도 한다.
- Communications
프로세스끼리 정보를 교환할 때 운영체제는 공유 메모리(Shared memory)나 메세지 파싱(Message passing)이라는 방법을 사용한다.
- Error detection
CPU나 메모리와 같은 하드웨어, 입출력장치, 그리고 사용자 프로그램 등에서 일어나는 에러를 탐지하고, 바로잡아야한다.
- Resource allocation
여러 사용자나 작업을 동시에 처리해야 한다면 자원은 잘 배분되어야 한다.
- Logging
시스템은 어떤 유저가 어떤 종류의 자원을 얼마나 사용하고 있는지 추적해야 한다.
- Protection and security
![](https://velog.velcdn.com/images%2Fjieuni%2Fpost%2F7e5a4692-d80c-4fc6-8286-1fe9bd4c46b3%2Fimage.png)
Interrupt vs Exception
Interrupt
- 하드웨어 장치가 만들어내는 신호
- Asynchronous
- 컴퓨터는 interrupt 기반으로 돌아간다.
Exception(=Software Interrupt)
- 하드웨어가 아닌 소프트웨어가 instruction을 실행하다가 발생하는 문제
- Synchronous : 딱 instruction을 실행하려는 그 시점에서 발생
- Trap(expected, inteded)
- Fault(unexpected)
=> 둘 다 kernel mode로 바뀐다.
System Call
System Call이란?
- 커널과 사용자 프로그램을 이어주는 인터페이스 역할을 한다.
- synchronous
![](https://velog.velcdn.com/images%2Fjieuni%2Fpost%2F1be9aa6d-ba18-4535-94aa-34de7bd1c8cb%2Fimage.png)
- Application Programming Interface(API)를 써서 운영체제한테 요청한다.
- Most common APIs
- Win32 for Window variants
- POSIX API for POSIX-based systems
- Java API for the Java virtual machine(JVM)
System Call - OS Relationship
User program이 운영체제랑 system call interface를 통해서 운영체제가 제공하는 서비스를 요청하고 그것을 반환한다.
![](https://velog.velcdn.com/images%2Fjieuni%2Fpost%2F1521406d-b7a4-44d3-b883-4ec53bbe5a0f%2Fimage.png)
Types of System Calls
시스템콜의 범주는 Process control, File management, Device management, Information maintenance, Communications, Protection 등으로 묶을 수 있다.
Separating Policy and Mechanism
- OS와 system software design에서 중요한 원칙
- Policy와 mechanism을 잘 분리한 것이 잘 만든 OS
- policy
- what should be done?
- Policy decisions are important for all resource allocation and scheduling problems
- 상황에 따라 변한다.
- mechanism
- how to do something?
- The tool for implementing a set of policies
- Example : CPU scheduler
- switch process
- Policy(what)
- Scheduling algorithm(FIFO, SJF, priority scheduling)
- Quantum size
- Mechanism(how)
- Dispatcher for low-level context switching
- Measure job length
- Priority queues
Operating System Structure
Simple Structure : MS-DOS
- 작은 메모리 공간에 효과적이고 핵심적인 기능을 구현
- 잘 모듈화로 구분되어 있기 보다는 덩어리로 구현
- 컴퓨터의 HW를 직접 건들수 있었다.
- single tasking, single memory
![](https://velog.velcdn.com/images%2Fjieuni%2Fpost%2F17ea5ff8-77e9-446d-8f9a-2c6a490fcc9c%2Fimage.png)
Layered Approach
- 운영체제 내부 구조를 layer로 구분()
- 어떤 한 레이어는 자신의 바로 다음 레이어에만 접근할 수 있다.
- layer를 거쳐야 하는 과정이 많아서 성능이 안좋다.
![](https://velog.velcdn.com/images%2Fjieuni%2Fpost%2F9405f1ad-db11-40d9-b294-0cd8fd2b35dc%2Fimage.png)
Monolithic : UNIX
- kernel을 중심으로 위로는 system call interface가 있고 아래는 HW를 interface를 한다.
- 운영체제가 해야하는 수많은 기능을 하나의 level에서 처리한다.
- 성능이 좋다.
- 큰 프로그램이 복잡하게 얽혀있다보니 코드들 간에 interdependency가 생기는 경우가 있다. -> 코드 관리, 보안이 복잡하게 되어있다.
- security, reliability : OS 한 부분만 잘못되도 전체가 잘못될수도 있다.
![](https://velog.velcdn.com/images%2Fjieuni%2Fpost%2F9abcf37d-4a2b-401d-8c33-dfabe1a297b7%2Fimage.png)
Microkernel
- 운영체제 핵심 부분을 작게 만들자.
- module structrue라 필요한 부분만 추가하고 관리하기 쉽다.
- 서로 communication하기 위한 overhead가 크다.
- CMU, L3/L4
![](https://velog.velcdn.com/images%2Fjieuni%2Fpost%2F642e5669-443d-437f-85c5-63c5728f6ad8%2Fimage.png)
Modules
- loadable kernel modules의 약자
- 운영체제 일부 기능을 동적으로 올렸다 내렸다 할 수 있는 기능
- 리눅스가 굉장히 잘 되어 있다.
Hybrid System
- 리눅스 monolithic지만 module을 가지고 있다.
- 윈도우는 monolithic이지만 microkernel을 가지고 있다.
- MacOS는 layerd 등 여러 가지 가진다.