본문 바로가기

Kernel9

Page Cache: write 글을 좀 오랜만에 쓴다. 이것저것 하느라 글을 그동안 못썼다. 흠, 다음 글은 뭐쓰지? 이전 글 VFS: read_iter() & write_iter() 원래는 페이지 캐시를 정리하려고 했는데 정리하다보니 read/write 매커니즘을 정리할 수밖에 없었다. 이 글에선 read_iter()가 어떻게 동작한는지 간단하게 알아본다. 관련 글 이 글은 가상 파일시스 hyeyoo.com Page Cache: filemap_read 이전 글 이전 글에서는 read() 시스템 호출에서 어떤 일이 일어나는지 알아봤다. read() 시스템 호출은 모드와 권한이 적절한지 확인한 후, 1) Direct IO를 수행하거나 2) filemap_read()로 페이지 캐시에서 hyeyoo.com 앞선 글에서 read()를 할 때.. 2022. 3. 9.
[Linux Kernel] 시간과 타이머 이번 글에선 시간 관련 코드를 짜는 방법을 다뤄보겠다. 타이머도 다룰 건데, low resolution timer (보통 'the timer wheel'이라고 언급된다.)를 다룰 것이다. high resolution timer나 bottom-half에서 사용하는 softirq, tasklet, workqueue 등도 다루려 했으나 워낙 방대해서 천천히 글로 남겨볼 생각이다. 시간의 측정 타이머 인터럽트와 jiffies 커널의 시간은 타이머 인터럽트를 통해 관리된다. 타이머 인터럽트는 초당 10번, 초당 1000번 처럼 정해진 빈도가 있으며, 이는 HZ로 정의되며, HZ가 작을수록 오차가 더 줄어드므로 시간의 해상도가 높아진다. 다만 초당 인터럽트 발생 수가 높아지면 그만큼 인터럽트 처리를 위한 오버헤드가.. 2021. 5. 4.
[Linux Kernel] 인터럽트와 후반부 처리의 개념 Interrupt 컴퓨터는 프로세서만으로 이루어져있지 않다. 디스크로부터 데이터를 읽고 쓰거나, 네트워크 카드로부터 데이터가 들어오거나, 사용자가 마우스나 키보드로 입력을 할 수 있다. 이처럼 프로세서는 주변 장치로부터 어떤 이벤트가 발생했다는 것을 처리할 방법이 필요한데, 그것이 바로 인터럽트이다. 마우스로 무언가를 입력하면 프로세서는 실행을 잠시 중단하고, 마우스가 발생시킨 인터럽트를 처리한 후 다시 원래 실행하던 코드로 돌아간다. 그런데 마우스가 발생시키는 인터럽트와 키보드가 발생시키는 인터럽트는 다를 것이다. 커널은 서로 다른 인터럽트에 IRQ 번호를 부여하여 관리한다. 또한, 부팅시, 혹은 실행 중에 IRQ 번호에 따라 인터럽트 핸들러라는 함수를 미리 등록하여, 인터럽트가 발생했을 때 실행될 콜.. 2021. 4. 28.
[Linux Kernel] proc 파일시스템과 seq_file 인터페이스 IT EXPORT, 리눅스 커널 프로그래밍을 읽고 있다. 책에서 다루는 커널 버전은 2.6인데 이걸 5.8에서 따라하려니 인터페이스가 많이 바뀌었다. 책 따라해보다 짜증나서 정리해보려고 한다. (아, 책은 정말 좋다.) 이 글은 5.8 기준으로 작성되었다. proc 파일시스템이란 procfs는 말 그대로 파일시스템이다. 하지만 디스크 기반 파일시스템과는 달리, 실제로 하드디스크 상에 존재하지는 않는다. 다만, 커널 상에서 VFS 인터페이스를 활용해 특수한 파일시스템을 구현한 것이다. procfs는 일반적으로 /proc에 마운트되어있다. 비슷하게 sysfs, debugfs 등이 존재한다. 한 번 쉘에서 /proc에 무엇이 들어있는지 확인해보자. ls /proc 숫자인 것과 아닌 것이 있다. 숫자된 폴더들은.. 2021. 4. 18.
[LInux Kernel] 문자 디바이스 드라이버 작성 디바이스 드라이버란 디바이스 드라이버란 마우스, 키보드, 모니터, 디스크, 네트워크 인터페이스 카드 등 컴퓨터의 주변 장치를 제어하기 위한 프로그램이다. 디바이스 드라이버가 없다면 주변 장치들을 사용할 수가 없다. read()라는 작업을 디스크 관점에서 어떻게 처리할 것인가?와 같은 하드웨어에 밀접한 기능들은 모두 디바이스 드라이버로 구현된다. 디바이스 드라이버는 리눅스 커널에서 모듈로 구현하므로, 먼저 리눅스 커널 모듈에 대해서 알아야 한다. 이건 글로 정리해두었다. 디바이스의 종류 디바이스는 문자 디바이스 드라이버, 블록 디바이스 드라이버로 나눌 수 있다. 문자 디바이스는 시간 순으로 들어오는 데이터를 처리한다. 예를 들어 마우스, 키보드의 입력과 같이 순서대로 처리하는 것이 의미가 있는 데이터들이다.. 2021. 4. 17.
[Linux Kernel] 가상 파일시스템이란 (VFS, Virtual Filesystem Switch) Virtual Filesystem이란 리눅스를 사용하면 다양한 형식으로 포맷된 디스크를 사용할 수 있다. 보통 리눅스어세는 ext2, ext3, ext4를 사용하지만 윈도우에서 사용하는 NTFS나 FAT같은 디스크도 사용할 수 있다. 그런데, 어떤 디스크를 사용하던간에 관계 없이 프로그램을 작성할 땐 open, read, write, close와 같은 시스템 호출을 사용해서 이 모든걸 처리할 수 있다. 지금은 이게 모두 당연하지만, 예전에는 그렇지 않았다. 실제 파일 시스템이 무엇이냐에 관계 없이 공통된 인터페이스 (open/read/write/close 등)로 접근하는 것은 매우 어려운 일이었다. 이렇듯 리눅스에서, 실제 파일시스템에 관계 없이 공통된 인터페이스로 파일시스템에 접근하도록 하는 계층을 가.. 2021. 4. 13.