리눅스 커널구조란 무엇인가?
>> 운영체제?
운영체제란 무엇인가?
>> "자원 관리자이다."
어떤 자원인가?
>> 물리적 자원과 추상적 자원이 있다.
물리적 자원에는 CPU, Memory, Disk, Terminal, Network등 시스템을 구성하는 요소와 주변장치가 있다.
추상적 자원에는 위의 물리적인 자원을 관리하기 위해 추상화 시킨 객체들이다.
대표적인 추상적 자원에는 CPU를 추상화시킨 태스크(Task), 메모리를 추상화시킨 세그먼트와 디스크를 추상화시킨 파일, 네트워크를 추상화시킨 통신 프로토콜, 패킷 등이 있다.
그리고 물리적인 자원에 대응하지 않고 추상적인 객체로만 존재하는 자원도 있는데
보안이나 사용자 id에 따른 접근제어 등이 이런 자원이다.
1. 태스크관리자 : cpu를 태스크라는 추상적 자원에서 관리함
(태스크의 생성, 실행, 상태전이(state transition), 스케쥴링, 시그널 처리, 프로세스 간 통신(Inter Process Communication) 제공
2. 메모리 관리자 : 메모리를 세그먼트나 페이지라는 개념으로 제공해줌
(물리 메모리 관리, 가상 메모리 관리, 앞의 둘을 위한 세그멘테이션, 페이징, 페이지 부재 결함 처리) 제공
3. 파일시스템 : 디스크를 파일이라는 개념으로 제공
(파일의 생성, 접근제어, inode 관리, 디렉터리 관리, 수퍼블록 관리등 서비스 제공)
4. 네트워크 관리자 : 네트워크 장치를 소켓이라는 개념으로 제공해줌
(소켓 인터페이스, TCP/IP 같은 통신 프로토콜 제공)
5. 디바이스 드라이버 관리자 : 디바이스 드라이버를 통해 일관되게 접근하도록 해줌
(디스크나 터미널,CD, 네트워크 카드등과 같은 주변 장치를 구동하는 드라이버 제공)
다음은 리눅스 커널 소스레벨 구조다.
리눅스를 설치하면 /usr/src/kernels/ 디렉토리 밑에서 리눅스의 소스를 볼 수 있을 것이다. 만약 안 보인다면 버전이 달라서 그렇다.
구글링으로 해결해야한다.
kernel 디렉터리
태스크관리자가 구현된 디렉터리다. 태스크의 생성, 소멸, 프로그램의 실행, 스케쥴링, 시그널 처리 긴으이 구현되어있다.
arch 디렉터리
리눅스 커널 기능 중 하드웨어 종속적인 부분들이 구현된 디렉터리다. 그래서 이름도 architecture를 의미하는 "arch"다.
이 디렉터리는 cpu의 타입에 따라 하위디렉터리로 구분된다. (인텔의 i386, ARM, 모토로라68, SUN의 Sparc, IBM의 PPC등이 있다.)
fs 디렉터리
리눅스에서 지원하는 다양한 파일시스템과 open(),read(), write()등의 시스템 호출이 구현된 디렉터리다. 현재 리눅스에는 60가지 정도의 파일시스템이 있고 대표적인 파일시스템으로는 ext2, ext3, ext4, nfs, fat,proc, sysfs, devfs, isofs, ntfs, reiserfs, f2fs, xfs등이 있다. 내 경험상으로 지자체나 기업들 서버는 대부분 ext4 또는 xfs 파일 시스템을 많이 썼던 것 같다.
mm 디렉터리
메모리 관리자가 구현된 디렉터리다. 물리 메모리 관리, 가상 메모리 관리, 태스크마다 할당되는 메모리 객체 관리 기능이 구현되어 있다.
driver 디렉터리
리눅스에서 지원하는 디바이스 드라이버가 구현된 디렉터리이다.
디바이스 드라이버란 디스크, 터미널, 네트워크 카드 등 주변 장치를 추상화시키고 관리하는 커널 구성요소다.
디바이스 드라이버는 크게 3가지로 구분된다. 파일시스템을 통해 접근되는 블록 디바이스 드라이버, 사용자 수준 응용프로그램이 장치파일을 통해 직접 접근하는 문자 디바이스 드라이버, TCP/IP를 통해 접근되는 네트워크 디바이스 드라이버다.
net 디렉터리
리눅스가 지원하는 통신프로토콜이 구현된 디렉터리다. 리눅스는 TCP/IP, UNIX 도메인 통신 프로토콜, 802.11, IPX, RPC, AppleTalk, bluetooth등 다양한 통신프로토콜이 구현되어있다. 소켓역시 이 디렉터리에 구현되어 있다.
ipc 디렉터리
리눅스 커널이 지원하는 프로세스간 통신기능이 구현된 디렉터리이다. 대표적인 프로세스간 통신에는 파이프, 시그널, sys v ipc(inter process communication), 소켓등이 있는데 이 디렉터리에는 message passing, shared memory, sema-phore가 구현되어있다.
init 디렉터리
커널 초기화 부분, 즉 커널의 메인 시작함수가 구현된 디렉터리이다. 하드웨어 종속적인 초기화가 arch/$(ARCH)/kernel 디렉터리 하위에 있는 head.S와 mics.c에서 이뤄지고 나면, 이 디렉터리에 구현되어 있는 start_kernel()이라는 C함수로 제어가 넘어간다. 이 함수가 커널 전역적인 초기화를 수행한다.
include 디렉터리
리눅스 커널이 사용하는 헤더 파일들이 구현된 디렉터리이다. 하드웨어 독립적인 부분은 include/linux 하위 디렉터리에 정의되어 있고 하드웨어 종속적인 부분은 include/asm-$(ARCH) 디렉터리에 정의되어 있다.
orhers 디렉터리
리눅스 documentation, 커널 라이브러리 함수등이 구현된 lib 디렉터리 등 주요 디렉터리 외에 있는 모든 디렉터리가 있다.
추상: 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용
유의어 : 관념 ( 현실에 의하지 않는 추상적이고 공상적인 생각.)
네이버 국어사전 관념 : https://ko.dict.naver.com/#/entry/koko/c95269e111d84b7e8b8f1b213ad80c2f
네이버 국어사전 추상 : https://ko.dict.naver.com/#/entry/koko/f9418a96888c4f658abb6b71cf19b69e
참조 : https://flylib.com/books/en/3.475.1.15/1/ (커널사진)
https://linux-kernel-labs.github.io/refs/heads/master/lectures/intro.html (커널 소스코드 레이아웃)
출처 : 리눅스 커널 내부구조
컴퓨터 동작원리 (진공관, 트랜지스터, 튜링머신, 폰 노이만) (0) | 2023.05.01 |
---|---|
리눅스 커널 컴파일 (0) | 2023.01.01 |