잡담
18년 1학기에 배웠던 커널 과목에 대해 설명한 것입니다.
컴퓨터를 공부하는 사람이라면 리눅스(Linux)에 대해 한번쯤은 들어보거나 경험해 봤으리라 생각합니다.
컴퓨터 운영체제(OS, Operating System)중 하나입니다.
물론 윈도우만 사용하다가 설치하면, 처음에는 사용하기 조금 어렵겠지만 금방 익숙해 질 수 있습니다.
컴퓨터를 배우는 사람이 리눅스에 익숙 해지면 매우 매우 좋다고 생각해요!
많은 개발 도구들과 응용들!!! 운영체제 비용도 안들고…
그런 리눅스의 핵심이 되는 부분이 커널 입니다. 커널이 뭔지 제가 배웠던걸 간략하게 적었습니다.
(잘못된 내용이 있을 수 있습니다. 참고만 하세요. 이글에서 컴퓨터는 리눅스를 의미합니다.)
커널 버전 읽는법
커널은 빠르게 업데이트 되고 있습니다. (www.kernel.org로 가시면 커널 소스파일 다운로드 가능)
소스코드가 공개 되어 있다보니 많은 개발자들이 개인에 맞게 수정하거나 새로운 기술을 추가 하거든요.
터미널 창을 열고 “uname -r“ 이라고 치면 현재 사용중인 리눅스의 커널 버전을 출력 해줍니다.
저는 4.15.0-34-generic이 출력 됬는데 숫자만 보시면 됩니다.
1 | 4 : 주(Major) 번호입니다. 큰 업데이트가 있을때만 바뀝니다. |
4버전까지 커널이 나왔지만, 많은 책들이 2.6.xx버전으로 설명합니다.
버전별 차이는 http://sfeg.tistory.com/217 에서 확인 할 수있습니다.
위의 링크 주인분의 글을 읽어보니 2.6으로 설명한 이유인 즉슨,
1 | 리눅스는 매우 많은 플랫폼을 지원하는 커널이다. |
라고 하네요. 2.6버전부터 모든 플랫폼을 지원하기 때문에 2.6으로 쓰이지 않았나 싶습니다.
(사실 저는 왜 2.4, 2.6으로 쓰인 책만 있는지는 잘 모르겠어요…)
무엇을 공부하나?
커널 과목을 1학기에 수강할 때는 전체적으로 뭘 배웠지 아리송 했었는데, 이번 18.2학기
디바이스 드라이버 과목을 수강하면서 아~ 하고 알게 되었습니다.
한번쯤은 또 긴가민가 봤나? 하는 그림입니다.
커널은 크게 5가지 파트로 나뉩니다.
파일들을 관리하는 File System Manager
: 파일 생성,접근제어, 특수 파일인 inode, 디렉터리, 슈퍼 블럭등을 담당합니다.
주 메모리(Main memory)를 관리하는 Momory Manager
: 일반 집에서 사용하는 컴퓨터의 RAM입니다. 메모리를 물리적으로, 논리적으로 관리합니다.
운영체제 과목에서 배우는 Page와 Segment, 물리 메모리를 할당시 사용하는 슬랩과 버디 개념이 나옵니다.
컴퓨터로 수행하는 작업을 관리하는 Task Manager
: 프로세스의 생성 실행 상태전이, scheduling, signal 처리(인터럽트), process간 통신(IPC)을 담당합니다.
네트워킹을 관리하는 Network Manager
: 소켓 인터페이스, 통신 프로토콜을 제공합니다.
컴퓨터에 연결된 장치들을 제어하는 Device Manager
: 윈도우의 장치 드라이버 같은 느낌입니다. 실제 장치들의 구동 하는 소스들을 관리합니다. ?펌웨어?
위의 5개의 파트별로 공부하게 됩니다.
각 파트별 배우는 것
파일 관리자에서는 실제 물리적 저장장치속 파일과 컴퓨터 상의 논리적 파일의 연결, 맵핑을 공부했습니다.
FAT FS와 EXT2 FS에서 컴퓨터가 실제 물리 장치의 데이터를 어떻게 찾아 가는가 하는 내용입니다.
윈도우의 NTFS는… 소스가 공개 되어있지 않아서 사람들이 추측으로 구현 했다고 하네요.
메모리 관리자는 컴퓨터가 실제 물리적인 메모리를 어떻게 관리하는지, 메모리의 물리적인 용량 한계를 극복하기
위한 가상 메모리, 물리 메모리와 가상 메모리(논리적) 간의 연결을 배웁니다.
테스크 관리자는 프로세스,쓰레드,테스크의 개념, 구조(task_struct) 그리고 테스크를 생성하는 함수 fork(), exec() 시리즈, 어떻게 Scheduling 하는지와 마지막으로 Signal에 대해서 배웁니다(시스템콜). Signal의 예로 리눅스 터미널에서 작업중 Ctrl+C를 누르면 종료되는 것입니다. 키보드의 특정 키들을 누르면 발생하는 것들.
디바이스 관리자는 리눅스는 모든 것을 파일로 관리하는데, 장치 또한 파일로 관리합니다.
그런 장치들을 어떻게 구분하는지(주번호, 부번호) 그리고 장치들을 어떻게 작동 시키는지 배웁니다.
장치들을 작동 시키는 파일을 디바이스 드라이버라고 말합니다. 디바이스 드라이버는 따로 책이 있습니다.
디바이스 드라이버를 구현(포팅)하는게 임베디드 개발자래요.
네트워크 관리자는 리눅스에서 네트워크가 어떻게 구현 되었는지, 제가 가지고 있는 책에는 TCP/IP 프로토콜의
구조를 설명 해놨고 TCP구현시 사용되는 자료구조, 그리고 실제 네트워크를 이용해 어떻게 통신하는지 구현되
있는 소스로 공부합니다. 커널의 소스 1/3이 네트워크와 관련된 소스라고 보는 사람도 있다네요.
마치며..
한 학기동안 배웠지만 하나 하나 공부 할려고 하면 매우 내용이 많고 어려운 것 같습니다.
한마디로 끝이없다. 지금도 커널은 계속 업그레이드 되고 있으니까요.
위에도 적었지만 틀린 내용이 있을 수도 있습니다. 그냥 읽고 이런 내용이구나 하셨으면 좋겠습니다.
끝~