
🔹 왜 OS가 필요한가?
컴퓨터는 CPU, 메모리, 저장장치 같은 HW로 이루어진다.
사용자가 메모리를 잘못 건드리면 시스템이 죽고, CPU를 잘못 제어하면 다른 프로세스가 망가진다.
그래서 운영체제(OS) 가 중간에서 HW를 대신 관리해준다.
🔹 전체 계층 구조
사용자
↓
응용 프로그램
↓
셸 / 라이브러리
↓
시스템 호출 (System Call)
↓
커널 (Kernel)
↓
하드웨어 (HW)
// OS = 커널 + 셸 + 라이브러리
🔹 각 계층 설명
- 커널 (Kernel)
- OS의 심장. HW를 직접 제어하는 유일한 존재
- 항상 메모리에 존재
- 사용자는 커널에 직접 접근불가
- 시스템 호출 (System Call)
- 커널로 들어가는 유일한 문이다.
- 응용 프로그램이 "파일 열어줘", "메모리 줘", "CPU 할당해줘" 같은 요청을 할 때
: System Call 발생, 커널 모드로 전환되고 커널이 대신 하드웨어를 제어한다.
응용 프로그램 → 시스템 호출 → 커널 → 하드웨어
- 셸 (Shell)
- 사용자가 명령어로 커널에게 작업을 요청할 수 있게 해주는 명령어 해석기
- 터미널에서
ls,cd,mkdir같은 명령어를 입력하면 셸이 이를 해석해서 System Call을 발생시킴 - ex) bash, zsh
사용자 입력(ls) → 셸이 해석 → 시스템 호출 → 커널이 디렉토리 읽어서 반환
- 터미널(Terminal) ≠ 셸
- 터미널은 입출력을 담당하는 응용 프로그램, 셸은 그 안에서 실행되는 해석기다.
- 라이브러리 (Library)
- 자주 발생하는 시스템 호출을 묶어놓은 함수
- ex) C언어의 'printf()'
- 셸은 사용자, 라이브러리는 프로그램(개발자)가
→ 둘 다 결국 시스템 호출을 발생시킴
🔹 정리
| 계층 | 역할 |
|---|---|
| 응용 프로그램 | 사용자가 직접 사용하는 프로그램 |
| 셸 | 명령어 해석기, 사용자 → 커널 |
| 라이브러리 | 시스템 호출을 함수로 묶음, 개발자 → 커널 |
| 시스템 호출 | 커널로 들어가는 유일한 문 |
| 커널 | OS의 핵심, HW 직접 제어 |
| HW | CPU, 메모리, 디스크 등 물리 장치 |
