구성
- 운영체제 공부하기
- 커널 vs 배포판
- (리눅스) 커널 디렉토리 구조
- 부팅 메세지
이 정리는 23-2에 수강한 오퍼레이팅 시스템 강의를 기반으로 하였습니다.
운영체제는 크게 4가지 단계로 공부한다.
이번 오퍼레이팅 시스템 강의에선 3번까지 학습하는 것을 목표로 한다. 3번의 운영체제의 5가지 주요 컨셉
은 interrupt
, process
, file
, memory
, io
로 구성된다. 그리고 이번 학기엔 이 5가지의 컨셉이 실제 소스 코드로 어떻게 구현되어있는지 읽어보고, 변경 해보고 하는 활동이 되겠다.
보통 운영체제에서 커널과 배포판을 구분한다. 예로 리눅스 커널이라고 하면 실제 리눅스의 핵심 코드(5가지 주요 컨셉을 구현한 것)를 말한다.
배포판은 추가적인 컴파일러 또는 편집기, 게임 등의 추가 sw가 함께 결합된 실제 사용판을 말한다.
여러가지 리눅스 배포판(데비안, 페도라, 젠투 등)이 있지만 이 클래스는 젠투를 사용해서 운영체제를 학습한다.
리눅스는 슬래시로 표현되는 루트 디렉토리가 있고, 그 밑에 bin, etc, root 등의 디렉터리가 존재한다.
리눅스를 부팅하고 제일 마지막으로 로그인에 'root'를 입력하여 로그인하는데, 이는 /root 경로에서 시작한다는 의미이다.
이 /root 경로의 하위에 linux-버전 폴더가 있고 이 아래에 우리가 살펴봐야하는 운영체제의 5가지 주요 컨셉을 구현하는 코드가 있다.
init 폴더는 리눅스 부팅시 제일 처음 진행되는 main.c 파일이 있는 디렉토리이다. main.c의 start_kernel 함수가 리눅스 프로그램이 시작하는 위치이다.
앞으로 이 디렉터리의 코드들을 뜯어보게 될 것이다.
옛날에 컴퓨터를 부팅하면 까만 화면에 흰 글씨로 빠르게 위로 지나가는 모습을 본 적 있을 것이다.
이 글씨들은 부팅 메세지라고 하며, 앞에서 말했던 start_kernel 함수에서 이것들을 출력하는 코드가 있을 것이다. (부팅시 처음 진행되는 함수이므로)
이때 출력은 printf
가 아닌 printk
를 사용한다. 리눅스 커널에 메세지를 출력하기 위한 함수이다. 위 부팅 메세지들도 전부 printk를 사용해서 출력된 메세지들이다. 리눅스 커널은 printf가 아닌 printk 함수를 사용하기 때문에, 내가 임의로 다른 파일을 만들어서 출력 테스트를 할 때도 printk를 사용해야 화면에 출력된다.
부팅 메세지는 빠르게 지나가기 때문에 읽기 어렵다. 그래서 실제 부팅 메세지 확인시에는 시스템의 커널 버퍼라고 부르는 영역에 이 메세지가 다 저장되어 있으므로 이걸 출력해 확인할 수 있다. 이것이 dmesg
명령어이다.
추후 추가