Chapter 2: Operating-System Structures
Operating System Services
Operating System
- 하드웨어와 애플리케이션 소프트웨어 중간 매개체 역할을 하는 소프트웨어
- kernel + 여러가지 service → 여러가지 sevice : protection, security
- kernel의 역할
-
Process 관리
CPU에서 리소스 사용하면서 일 시키는 것
-
Memory 관리
코드, data, stack, heap 공간 관리
-
I/O 관리
I/O 요청 시 I/O 접근할 수 있게 하는 것
-
Storage 관리
비휘발성 저장 장치 제어하는 것
- kernel 공간 + system 공간 + user 공간 명확하게 구분
- 지원하는 기능
- Virtualization 가상화
- Concurrency 병렬화
- Persistency 지속성
Operating System Services
- 실행 환경 제공
- User Interface
- Program execution
- I/O operations
- user를 위한 함수 제공
- File-system manipulation
- Communications : IPC (process 간의 통신)
- Error detection
- resource sharing을 통한 효율적은 operation 제공
- Resource allocation
- Accounting
- Protection and Security
A View of OS
- 각각의 역할, 모듈별로 기능들을 서비스할 수 있도록 만들어짐
- system calls : 서비스 ↔ 유저 애플리케이션 매개체 역할 → OS API 제공
User and Operating-System Interface
OS User Interface
- CLI
- 대표적 CLI : shells
- bash shells 창시자 : GNU 프로젝트
- GUI
- MS Windows, Applc Max OS X, Unix/Linux…
- TSUI
- Touchscreen user interface
- 터치 패드 사용
- Voice commands Interface
→ user interface를 통해 process 실행
Programming Interface
- API : Application Programming Interface
- scanf → read system calls 매핑하여 실행
- system call : user application에서 kernel에 접근하기 위한 장치
System Calls
System Call Implementation
- System-call interface
- 사용자는 system call이 어떻게 구현됐는지 몰라도 됨
Relation between API and System Call on Linux
- Interrupt
- 소프트웨어 인터럽트 : kernel에게 알릴 때 (0x80)
- 하드웨어 인터럽트 : 문제가 생겼을 때 (trap)
- IDT(Interrupt Description Table)
- 인터럽트들을 배열해놓은 테이블
- kernel 내부에 정의
- interrupt들마다 번호가 몇 번인지 정의
- movl 2, %eax
- 커널에 갔을 때 eax 값에 따른 동작
- 2니까 sys_fork()
- sys_call_table
- 링크드리스트 형태로 실행할 코드를 포인팅
- kernel 내부에 정의
Standard C Library Example
- 대부분 systemcall 내부적으로 호출
- 고급언어 작성 → (컴파일) → 어셈블리어 → 기계어(bit의 집합) → CPU가 실행
- “ Stack/Heap/Data/Instruction “
- PC값에 따라 Instruction이 BUS 타고 CPU 안에 들어간다. → 명령어가 어떤 의미를 가지는지는 CPU에 따라 정의됨.
CPU 레지스터
GPR 범용 레지스터 : eax, ebx, sp, pc
Segment 레지스터 : data segment, code segment
Flag 레지스터 : Zero flag, branch flag
Operating-System Structure
Kernel의 구조
-
monolithic kernel
- Non Simple Structure
- ex. UNIX, maxOS, windows, ios
- service들을 모두 통으로 연관되게
- 장점 : 빠름, 효율적
- 단점 : 하나의 service를 수정할 때 다른 것들에 영향을 미침 → 유지보수 어려움
-
micro kernel
- ex. mach
- 커널에는 핵심만(process, memory, I/O resource) 남기기 → 나머지는 위로 올림
- message passing을 통해 모듈 간 통신
- 장점 : 유지보수, 기능 확장 good!
- 단점 : kernel 공간 - user 공간 통신할 때 성능 저하
-
module kernel
- ex. Linux, Android, Solaris
- 1, 2번 장점만 흡수
- 한꺼번에 집어넣되 인터페이스 구분(모듈형) → kernel의 핵심 기능 넣고 빼고 할 수 있는 것
- 장점
- 시스템콜 오버헤드 X
- kernel 내 통신 빠름 → 속도, 효율성
- 단점
- 막상 분리하니 커널의 성능이 떨어짐 → 사실상 1번 형태로 가는 중
- 확장 어려움
구조의 역사
- Simple Structure : MS-DOS
- 가장 초기의 간단한 kernel
- OS의 기능 거의 X
- monolithic kernel
- Layered Approach
- 모듈화 → 각 계층은 바로 아래 계층에서 제공하는 기능만 사용
- 장점
- 유지 보수 용이 → 위 아래하고만 맞춰주면 됨.
- 설계 구현 간단
- 단점
- 각 계층의 기능 정의 어려움 → 오직 하위 계층의 기능만 사용하기 때문
- 순서대로 계층을 따라 기능이 수행되어야 함 → 비효율성 (성능 저하)
- Microkernel System Structure
- module kernel
- Hybrid System
- 장점 최대한 취합
- Linux, Android(Module) + Windos,macOS(Monolithic)
OS 구조
- UI - System call - kernel의 Services
- UI (알고만 있기)
- window : Explorer
- macOS : Aqua
- ios : springboard
- Linux : KDE
- GNU : GNOME
- Services