1. 시스템 콜
- 유저 인터페이스 ↔️ 시스템 콜 ↔️ 서비스 ↔️ OS ↔️ HW
- 시스템 콜을 중심으로 유저 공간 / 커널 공간으로 분리
- 시스템 콜: 유저 → 커널 모드로 진입하는 통로(↔️ 콜백: 커널 → 유저 모드), 커널의 protected 서비스를 사용하기 위한 수단
- 직접적인 시스템 콜이 아니라 API를 사용: OS마다 서로 다른 시스템 콜 구조이기 때문에 라이브러리가 제공하는 함수를 통해 시스템 콜과의 연결 가능(POSIX 등), Windows, Linux 계열마다 작업은 동일하지만 서로 다른 이름
- 시스템 콜 테이블: 시스템 콜 인터페이스에서 호출하기 편리하도록 특정한 번호로 역할 구분
1. 유저 모드 → 커널 모드 전환
- 트랩: 시스템 콜을 사용하는 트랩을 유저 프로세스가 호출
- CPU: 모드 비트 1 → 0 변경, 커널 트랩 핸들러 호출
- OS: 트랩 핸들러가 커널 내부 함수 호출
- OS: 작업 종료 후 모드 비트 0 → 1 변경, 유저 프로세스 수행
- fork() → 정적 라이브러리 내 약속된 인스트럭션 실행
- mov 2 → 시스템 콜이 2번 테이블에 위치하기 때문
- int 0x80 → IDT의 시스템 콜 함수
- IDT → 커널의 시스템 콜 테이블 2번 sys_fork() 수행
- sys_fork() 호출
2. 시스템 콜 파라미터 전달
- 레지스터: 빠르고 단순, 고비용, 사용 가능한 레지스터 개수 이상의 파라미터가 있을 수 있음
- 메모리 블록: 연속된 메모리 블록에 파라미터를 저장한 뒤, 시작 주소만을 레지스터에 전달(리눅스 등에서 사용)
- 스택: 유저 프로그램은 push / OS는 pop
3. 커널 시스템 콜 핸들러
- syscall entry points → 테이블 번호에 따른 시스템 콜 번호가 핸들러에 전달
- 아규먼트 → 레지스터 또는 스택에 위치
- 아규먼트 → 유저 메모리에서 커널 메모리로 전달(커널을 유저로부 보호하기 위한 복사 과정)
- 아규먼트 확인 → 복사한 아규먼트가 적절한지 체크
- 아규먼트 → 유저 메모리로 반환
2. OS 설계
- 다양한 기준에 따라 OS를 설계할 수 있음(fairness, real-time, performance, security 등)
1. 범용 OS와 특수 OS
- 범용 OS: 목적 X, 다양한 용도로 활용되는 OS(윈도우 등)
- 특수 OS: 목적 O, 군용 장치 등, isolation 또는 robustness 주의
- 성능과 공평성 간의 Trade-off 존재: 제어 빈도와 성능 주의
2. 추상화
- 레이어링: 여러 계층으로 인터페이스를 분리하는 방법. 독립적인 레이어 수정을 할 수 있음
- 모듈러리티: 프로그램을 분할하는 방법. 각 계층/컴포넌트 단위를 전체 또는 일부를 포함할 수 있음. OS를 기능 단위로 분할하는 방법
3. 커널 구조
- 컴퓨터 상 "언제나" 작동하는 프로그램
- 시스템의 모든 실행 권한을 가지는 커널
- OS의 핵심 기능을 수행
1. Monolithic
- 단일 구조로 커널 구성
- 모든 서비스가 "같은" 주소 공간 위치 → 어플리케이션은 자신의 주소 공간을 커널 코드 매핑, 서비스 이용
- HW 계층에 대한 단일한 추상화 정의
- 주소공간: 논리적 실체에 대응되는 주소의 범위(같은 주소 공간에 있다면 주소를 통해 접근 O, 주소 공간을 알지 못한다면 접근 X)
- 장점: 시스템 콜 및 커널 서비스 전달 시 적은 오버헤드
- 단점: 일부분의 수정이 전체 영향을 미침, 유지 보수 난해, 특정 모듈 버그 존재 시 다른 모든 모듈에 영향을 미침
2. Micro
- 기능에 따라 모듈화된 커널들이 독립된 주소 공간에 위치
- 모듈: 분리 가능한 커널 서비스
- 커널 간 동작은 IPC를 통해 수행 - 오버 헤드 존재
- IPC, 어플리케이션 서비스 콜 전달 등 단순 기능만을 제공
- 장점: 의존성이 낮은 독립된 커널 구조(유지보수 용이), 특정 커널 서버만을 독립적으로 실행 및 종료 가능, 안정적(특정 서비스만을 재시작 가능), protected memory에서 보안 이슈 SW 분야에 적합
- 단점: 낮은 속도(IPC 및 컨텍스트 스위칭으로 인한 오버헤드)
현대의 OS는 모놀리틱과 마이크로 커널 구조의 장점을 차용하고 있다!
3. Hybrid
- 특정 상황에 따른 모놀리틱/마이크로 구조를 선택 사용
4. 시스템 SW
- 사용자: 시스템 SW를 통해 시스템 콜을 수행함
- UI, 프로그램 로딩 및 실행, 네트워킹, 백그라운드 서비스 등
5. OS와 커널
- OS: (1). 커널 + GUI + 라이브러리 (2). 커널
- 커널: OS의 핵심, 자원 할당, HW 인터페이스, 보안 등 담당
- GUI, 라이브러리