본문 바로가기

linux11

[Linux Kernel] 가상 파일시스템이란 (VFS, Virtual Filesystem Switch) Virtual Filesystem이란 리눅스를 사용하면 다양한 형식으로 포맷된 디스크를 사용할 수 있다. 보통 리눅스어세는 ext2, ext3, ext4를 사용하지만 윈도우에서 사용하는 NTFS나 FAT같은 디스크도 사용할 수 있다. 그런데, 어떤 디스크를 사용하던간에 관계 없이 프로그램을 작성할 땐 open, read, write, close와 같은 시스템 호출을 사용해서 이 모든걸 처리할 수 있다. 지금은 이게 모두 당연하지만, 예전에는 그렇지 않았다. 실제 파일 시스템이 무엇이냐에 관계 없이 공통된 인터페이스 (open/read/write/close 등)로 접근하는 것은 매우 어려운 일이었다. 이렇듯 리눅스에서, 실제 파일시스템에 관계 없이 공통된 인터페이스로 파일시스템에 접근하도록 하는 계층을 가.. 2021. 4. 13.
[Linux Kernel] 리눅스 커널 모듈 작성 리눅스 커널 모듈이란 리눅스 커널 모듈은, 시스템에 설치된 커널 바이너리와는 다르게 동적으로 기능을 추가할 수 있는 오브젝트 파일이다. 예를 들어 커널에 어떤 기능을 추가하기 위해선 코드를 수정하고, 커널을 컴파일하고 설치한 후에 재부팅을 해야한다. 하지만 모듈로 작성하면 시스템이 실행중인 도중에도 동적으로 기능을 추가하거나 제거할 수 있다. 물론 모듈을 추가하거나 제거하려면 root 권한이 필요하다. 시스템 호출을 구현하거나, 문자/블록 디바이스 드라이버, 파일시스템 구현 등 다양하게 사용될 수 있다. 커널 모듈의 로딩과 언로딩 lsmod로 설치된 모듈을 확인하고, insmod로 모듈을 로드하고, rmmod로 모듈을 언로드할 수 있다. modprobe, depmod 등의 명령도 존재한다. 간단한 차이점.. 2021. 4. 13.
[kernel/locking] spinlock (2) - Test And Set, Ticket, ABQL, MCS [kernel/locking] - spinlock(1) 앞선 글에서, 아키텍처에 종속적인 부분을 제외하고 spinlock을 어떻게 사용하는지 이야기해보았다. 실제 아키텍처별로 구현된 spinlock 구현체를 보려면 일단 spinlock에 대한 개념들이 더 필요하므로 개념을 짚고 넘어가겠다. Test And Set (TAS) spinlock의 기본적인 구현은 lock을 획득할 수 있을 때까지 loop를 도는 Test And Set lock이라고 할 수 있다 // Test and Set lock pseudocode while (test_and_set(lock) == FAILED) { // spin } // 위의 while문이 끝나면 lock을 획득했다는 것이 보장된다. 여기서 test_and_set이란, 현.. 2021. 3. 28.
[kernel/locking] spinlock (1) - spinlock 사용법 앞선 글에서 lock이란 무엇이고, lock의 필요성에 대해서 알아보았다. 이번 글에서는 가장 기본적인 spinlock을 리눅스 커널에서 어떻게 구현했는지 알아볼 것이다. 우선 관련된 개념을 몇 가지 살펴보자. 참고로, 이 문서에서 다루는 spinlock은 커널에서 사용하는 spinlock에 대해 다루고 있다. userspace에서의 spinlock은 pthread spinlock을 사용해야 한다. 자료구조 spinlock은 include/linux/spinlock_types.h에 spinlock_t로 정의되어있다. 한 번 살펴보자. /* include/linux/spinlock_types.h */ typedef struct spinlock { union { struct raw_spinlock rlock.. 2021. 3. 27.
리눅스 커널 입문에 도움이 될만한 것들 리눅스 커널 1도 모르는 학생이 쓴 거라 도움이 안 될 수도 있습니다 어렸을 때부터 리눅스 커널을 공부하는 데에 로망이 있었는데, 당시에 중딩이던 나는 엄청난 진입 장벽에 좌절하고 이론 책만 조금 공부했던 기억이 있다. (그리고 이것도 제대로 이해 못했다 ㅋㅋㅋ) 그래도 한 5년 동안 머리가 자랐으니, 다시 도전해보고 싶어서 며칠 전부터 구글링을 엄청나게 했다. 아, 물론 리눅스 커널의 대략적인 작동 방식, 자료구조를 정리한 책은 많다. 그런데 그것도 중요하지만 직접 소스코드를 분석해보고 싶었다. 물론 5년 전이나 지금이나 진입 장벽은 높은 것 같다 아무튼 간에, 내가 느낀 리눅스 커널 입문의 어려운 점은 : 1. 우선 어디서부터 시작해야 할지 모른다. 내가 "프로세스 관리"에 관심이 있어서 소스를 찾아.. 2020. 1. 2.