1. OS service
사용자 인터페이스(UI) : CLI, Batch Interface, GUI | |||||||
↑↓ | |||||||
System call | |||||||
↑↓ | |||||||
프로그램 실행 |
입출력 연산 | 파일 시스템 조작 | 통신 | 오류 탐지 | 자원 할당 | 회계 | 보호/보안 |
읽기/쓰기 /생성/삭제 /수정/권한 |
프로세스 간 정보 교환 | 시스템 자원에 대한 접근 통제 /외부로부터의 접근 관리 |
2. System Call
- System call은 Privileged instruction 즉, Kernel mode에서만 사용가능한 Instruction을 호출한다
- 이를 호출하기 위해 User는 OS가 지원하는 User Interface를 통해 요청한다
- System call이 호출되면 User mode에서 Kernel mode로 전환되어 System call에 맞는 요청을 수행한 뒤
다시 User mode로 전환된다
- 이때 대부분의 접근은 High-level interface 즉, API를 활용하여 구현된다
3. OS 디자인
정답은 없지만
실행 환경을 생각하고,
User, System의 Goal을 고려해서 구현되어야 한다
또한 기능적으로
1) Policy : 무엇을 해야하는지
2) Mechanism : 어떻게 해야하는지, 즉 policy set을 구현하는 tool
각각을 독립적으로 잘 만들어야 범용성있게 활용 가능
4. 구조 종류
1) Simple structure
- Module로 나누어지지 않음
- No User/Kernel mode : Application이 HW에 접근 가능
- Single tasking/memory space
- System 부팅 시 Shell이 호출
- Process 개념 X
2) Layered approach
- 가장 바깥 layer : User <-> 가장 안쪽 layer : HW
- 인접한 layer끼리만 통신 가능, 즉 먼 layer끼리는 중간 layer들을 거쳐야함
- 확장/유지가 간편해짐
3) Monolithic
- No layered와 layered의 사이(beyond simple but not fully layered)
: 표를 보면 인접하지 않은 layer 간에 연결이 있음
- 성능이 매우 좋음
- 유지/보수가 어렵다
- 보안/안정성이 좋지 않다
: OS의 component가 전체를 파괴할 수 있고 전체 OS cod가 하나의 memory space를 위해서 실행되기 때문에
4) Micro kernel
- 최대한 많은 기능을 User-space service로 보낸 것
- 유지/보수/추가/안정성/보안성이 비교적 높다
- 하지만 kernel space와 통신하는 user-space 성능에 overhead가 발생할 수 있다
5) Module
- 현재 대부분의 OS 구조
- 동적으로 kernel module을 load한다
6) Hybrid system
5. Syetem Boot
CPU와 HW에게 power전달
> CPU는 특정 주소에 있는 Instruction을 실행
: Bootstrap program을 Load하라는 Instruction
> Bootstrap program이 OS를 Load하고 실행
ex) Bootstrap program이 BIOS일때
BIOS가 1차 boot loader를, 1차 boot loader가 2차 boot loader를 load
: kernel이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 OS를 시동시키기 위한 목적을 가진 프로그램, 하드디스크에 존재한다
> 2차 boot loader가 kernel을 memory에 load
> OS 실행
'CS > OS' 카테고리의 다른 글
[OS] CPU, Processor, Core, Process, Thread 그리고 관계 정리 (0) | 2020.11.04 |
---|---|
[OS] 5. Thread (0) | 2020.11.03 |
[OS] 4. 프로세스(2) (0) | 2020.11.02 |
[OS] 3. 프로세스(1) (0) | 2020.10.30 |
[OS] 1. 개요 (0) | 2020.10.28 |