본문 바로가기

전체 글154

[KNK 정리] 1장: Introducing C 커널을 보다보니까 C언어를 좀 더 이해하면 좋겠다 싶어서 KNK (C Programming: A Modern Approach)를 읽고 있다. 근데 정리를 안 하니까 자꾸 헷갈려서 요약 + 연습 문제 풀이를 해보려고 한다. 요약/정리 C언어의 역사 C언어는 1970년대 데니스 리치와 켄 톰슨이 당시 벨 연구소에서 진행하던 유닉스 운영체제를 위해 개발된 언어이다. C언어 이전까지만 해도 유닉스는 어셈블리어로 작성되었다. 어셈블리어는 개발도, 디버깅도 번거로울 뿐만 아니라 아키텍처에 의존적이기 때문에 이식성도 좋지 않았다. 그래서 데니스 리치와 켄 톰슨은 좀더 추상적인, 고수준의 언어를 적용하기로 했고, 그렇게 C언어가 탄생하게 되었다. C언어의 표준 컴퓨터공학을 공부하다보면 표준의 부재로 생기는 문제들이 매.. 2021. 8. 16.
공군 전자계산 훈련소 + 특기학교 후기 2달간의 훈련소, 특기학교 기간이 끝났다. 그동안의 과정을 정리해보려고 한다. 왜 전자계산에 지원했나 나는 군대에서 무슨 일을 하든 컴퓨터로 하는 일을 하고 싶었고, 그게 아니면 군대에 가기가 싫었다. 물론 지금 생각해보면 그냥 어디든 개인 시간을 많이 확보할 수 있는 곳으로 가도 좋았겠지 싶긴 하다. 공군 전자계산 지원할 때 사실 난 작년까지 군대에 올 계획이 없었다. 그래서 군대에 지원할 때 조금 불리했다. 그냥 육군으로 지원했으면 큰 상관이 없겠지만, 지정특기로 지원하려면 대학 전공, 자격증 점수가 많이 들어간다. 그래서 원래는 해군 정보보호병으로 지원했다가 자격증 점수가 부족해서 떨어졌고, 그 다음에 공군 전자계산으로 지원했는데 운좋게 비수기라 경쟁이 치열하지 않았다. 만약 전자계산 특기로 지원할.. 2021. 8. 16.
입대 전 생각 정리 최근 2달동안 미친듯이 달렸다. 개인적으로 진행하고 있는 프로젝트가 있는데, 낮에는 팀 프로젝트를 진행하고 집에 와서는 새벽까지 리눅스 커널을 보는 것을 반복했다. 그동안 느낀 것도 있고, 또 입대도 19일 남고 하니 이런저런 생각을 정리해본다. 문서화와 커밋 메시지는 정말 중요하다. 이전까지는 제대로 git을 쓰는 법을 몰랐다. 보통 1 - 3인 정도에서 소규모로 프로젝트를 진행할 때는 카톡 정도로 의사소통 해도 해결이 되었다. 심지어 문서화는 제대로 하지도 않았다. 하지만 커널을 공부하면서, 프로젝트 바깥에서 참여를 하려고 하니 눈앞이 깜깜했다. 문서도 부족하다고 느꼈다. 그리고 패치를 보내다 보니, 리뷰하는 사람이 쉽게 이해할 수 있도록 커밋을 잘게 쪼개고 메시지도 명확하게 남기는 게 중요했다. 프.. 2021. 5. 26.
[Linux Kernel] 문자 디바이스 드라이버 (Blocking IO) 이 글은 가상 파일시스템, 문자 디바이스 드라이버 작성, 세마포어를 어느 정도 이해한다고 가정한다. 이 글에서는 wait queue라는 인터페이스를 소개하고 wait queue로 Blocking IO를 구현하는 방법에 대해 설명할 것이다. Non-blocking IO가 되게 간단하긴 한데 지금 공부하기가 싫으니 다음 번에 Non-blocking IO & Async IO로 같이 글을 써야겠다. Blocking vs Non-blocking IO 일반적으로 우리가 open을 통해서 여는 파일에 작업을 하면, blocking 방식으로 처리하게 된다. blocking IO 파일에 대하여 read를 호출했으나 아직 읽을 내용이 없을 때, write를 했으나 아직 데이터를 버퍼에 쓸 수 없을 때, open을 했으나 .. 2021. 5. 20.
[Linux Kernel] 주소와 메모리 공간 이 글은 LDD3을 공부하면서 정리하였고 필요한 내용을 그때그때 추가했다. 사용자 프로세스 관점에서 바라보는 주소 공간과 커널 관점에서 바라보는 것은 매우 다르기 때문에 이를 이해할 필요가 있다. 이 글을 읽으려면 페이징, 가상 파일 시스템, 그리고 Memory-Mapped IO를 어느 정도 이해하고 있어야 한다. 처음엔 커널에서 왜 무작정 userspace의 주소에 접근하면 안되는지 이해하지 못했고, 왜 그러면 안되는지도 몰랐는데 이걸 공부하고 나니까 이해가 됐다. 역시 Greg 아저씨 짱짱맨... ㄹㅇ... 발끝이라도 따라가고 싶다. 이 글에선 커널과 사용자 프로세스의 관점에서 주소와 메모리 공간이 어떻게 이루어져있는지 살펴볼 것이다. 다음 글에선 이번 글에서 다룬 내용을 바탕으로 디바이스 드라이버에.. 2021. 5. 15.
[Linux Kernel] 고민과 공부 방향 정리 리눅스 커널은 정말 진입 장벽이 높다. 이제 제대로 공부를 시작한지는 2개월 정도 됐는데, 주요 서브시스템들 (I/O, pci, usb, address space, memory management, timer, ... 등등) 을 공부해도 당장 개발을 시작하기는 어렵다. 지금 보는 책이 아래 정도인데 커널 개발에 있어 정말 필수적인 지식들, 그리고 어느 정도 깊이 있는 지식들도 약간 다룬다. Linux Device Drivers book - Bootlin A must-have book for people creating device drivers for the Linux kernel! Now available in a single PDF file. Linux Device Drivers from Jonath.. 2021. 5. 12.
[Linux Kernel] 첫 의미있는 기여 경험 (mm, slub) 리눅스 커널에 커밋 해보자 리눅스 커널에 커밋해보자! 리눅스 커널에 커밋한다는 건 정말 멋진 일이다. 하지만 나는 아직 쪼렙이기 때문에 커널의 중요한 파트에 기여할 수는 없다. 하지만 리눅스 커널에 커밋하기 위해서 hyeyoo.com 올해 3월에 썼던 글, drivers/staging에서 코딩 스타일을 고쳐서 보내봤다. 후기 먼저 적어보자면.. 지금까지 기여했던 건 staging 디렉토리에서 코딩 스타일을 고치거나, 주석의 오타를 고치는 정도의 trivial한 패치였다면 이번에는 약간의 (?) discussion을 거쳐서 기여했다. 패치 자체는 대단한 내용은 아니다. 하지만 과정이 너무 재미있었고 좋은 경험이어서 자세하게 기록을 남겨본다. 이전까진 오픈소스가 모두에게 열려있다는 걸 머릿속으로만 알고있었는.. 2021. 5. 12.
군대 간다악 군대에선 보통 뭐로 코딩을 할까? ㅋㅋㅋㅋ 가서 리눅스 커널이랑 알고리즘좀 공부해야지. 2021. 5. 9.
[Linux Kernel] 메모리 할당 이번 글에선 디바이스 드라이버 관점에서 메모리 할당에 관하여 다룬다. 메모리 관리 기법, 주소 공간에 대해서는 다루지 않는다 주소와 메모리 공간은 아래 글을 참고하자. [Linux Kernel] 주소와 메모리 공간 이 글은 LDD3을 공부하면서 정리하였고 필요한 내용을 그때그때 추가했다. 사용자 프로세스 관점에서 바라보는 주소 공간과 커널 관점에서 바라보는 것은 매우 다르기 때문에 이를 이해할 필요 hyeyoo.com kmalloc, kfree /** * kmalloc - allocate memory * @size: how many bytes of memory are required. * @flags: the type of memory to allocate. * * kmalloc is the normal.. 2021. 5. 8.