리눅스 커널 구조
운영체제가 관리해야 할 자원은 크게 물리적인 자원과 추상적인 자원으로 구분할 수 있다.
- 물리적인 자원은 CPU, 메모리, 디스크, 터미널, 네트워크 등 시스템을 구성하고 있는 요소들과 주변 장치 등이 있다.
- 추상적인 자원은 물리적인 자원을 운영체제가 관리하기 위해 추상화 시킨 객체들이다.
- CPU를 추상화시킨 task
- 메모리를 추상화시킨 세그먼트와 페이지
- 디스크를 추상화시킨 파일
- 네트워크를 추상화시킨 프로토콜, 패킷
- 물리적인 자원에 대응하지 않으면서 추상적인 객체로만 존재하는 자원도 있다. (보안(security)나 사용자 ID에 따른 접근 제어(access control)등)
리눅스 개념적 구조
- Task Manager
- cpu라는 물리적인 자원을 태스크라는 추상적인 자원으로써 제공
- 태스크의 생성, 실행, 상태 전이, 스케줄링, 시그널 처리, 프로세스 간 통신등의 서비스를 제공
- Memory Manager
- 메모리를 세그먼트나 페이지라는 개념으로 제공
- 물리 메모리 관리, 가상 메모리 관리, 이들을 위한 세그멘테이션, 페이징, 페이지 부재 결함 처리
- File System
- 디스크를 파일이라는 개념으로 제공
- 파일의 생성, 접근 제어, inode 관리, 디렉터리 관리, 수퍼 블록 관리 등의 서비스를 제공
- Network Manager
- 네트워크 장치를 소켓이라는 개념으로 제공
- 소켓 인터페이스, tcp/ip 와 같은 통신 프로토콜 등의 서비스를 제공
- Device Driver
- 각종 장치를 디바이스 드라이버를 통해 일관되게 접근하도록 해줌
- 디스크, 터미널, cd, 네트워크 카드 등과 같은 주변 장치를 구동하는 드라이버들로 구성
운영체제는 사용자에게 서비스를 제공하기 위해서 자원을 관리하고 이 때 사용자는 user space에 동작하는 태스크를 의미하며 서비스는 system call을 의미한다. 따라서 운영체제는 시스템 콜을 통해 태스크가 자원을 사용할 수 있게 해주는 자원관리자이다.
리눅스 소스 트리
linux lxr 참조
- kernel
- task manager가 구현된 디렉터리
- 태스크의 생성과 소멸, 프로그램 실행, 스케줄링, 시그널 처리 등의 기능 구현됨
- 문맥교환 같이 하드웨어 종속적인 부분은 arch/$(ARCH)/kernel 에 구현되있음
- arch
- architecture
- 리눅스 커널 기능 중 하드웨어 종속적인 부분들이 구현된 디렉토리
- cpu의 타입(intel i386, ARM, 모토로라의 68시리즈, sun의 sparc, ibm의 ppc등)에 따라 하위 디렉토리로 다시 구분
- i386기준으로 arch/x86 디렉토리
- arch/x86/boot 디렉토리에는 시스템 부팅시 사용하는 부트스트랩 코드가 구현
- arch/x86/kernel 에는 태스크 관리자 중 문맥 교환이나 쓰레드 관리 같은 기능
- arch/x86/mm에는 메모리 관리자 중 페이지 부재 결함 처리 같은 기능등의 하드웨어 종속적인 부분이 구현
- arch/x86/lib에는 커널이 사용하는 라이브러리 함수가 구현
- arch/x86/math-emu에는 FPU(Floating Point Unit)에 대한 에뮬레이터가 구현
- fs
- 파일시스템과 open(), read(), write() 등의 시스템 콜이 구현
- 대표적인 파일시스템으로 ext2, ext3, ext4, nfs, fat, proc, sysfs, devfs, isofs, ntfs, reiserfs, f2fs, xfs등이 있다.
- 다양한 파일 시스템을 일관된 인터페이스로 접근가능하도록 가상 파일시스템도 디렉토리 내에 존재
- mm
- 메모리 관리자가 구현된 디렉터리
- 물리 메모리 관리, 가상 메모리 관리, 태스크마다 할당되는 메모리 객체 관리등
- driver
- 디바이스 드라이버가 구현된 디렉터리
- 디바이스 드라이버란 디스크, 터미널, 네트워크 카드 등 주변 장치를 추상화시키고 관리하는 커널 구성 요소
- 리눅스를 처음 설계하는
- net
- ipc
- init
- include
- others
'linux' 카테고리의 다른 글
scheduler - cron 표현식 (0) | 2022.10.13 |
---|---|
linux task mangement (1) | 2022.10.05 |
운영체제 동작 사례 (0) | 2022.10.04 |
Makefile tutorial (0) | 2022.09.28 |
Linux File System (0) | 2022.09.27 |