오늘 처음으로 I Am Root 에서 진행하는 18기 커널 스터디에 참여했다. 이렇다할 특별한 활동은 없었고, I Am Root 에 대한 간단한 소개와 어떤 방식으로 스터디가 진행될지에 대해 이야기를 나눴다.리눅스 커널 심층 분석리눅스 커널의 이해리눅스 커널의 내부구
2021년 05월 29일 15:00 ~ 22:00 스터디 진행 내용을 정리한 글입니다. 0. 스터디 공지 사항 참석자 53 명 서기 및 공유 서기: 김현우님, 김성원님 공유: 이민욱님 매주 스터디 내용은 iamroot 사이트에 정리되어 올라갈 예정 진도
핀란드 헬싱키 대학에서 전산학을 전공하는 학생이었던 리누스 토발즈(Linus Benedict Torvalds) 는 1988 년에 386 보호모드에서 작업 전환기와 페이징, 타이머 인터럽트 핸들러와 그 외 여러가지 디바이스 드라이버와 기초적인 파일 시스템 등을 만들어
2021년 06월 05일 15:00 ~ 22:00 스터디 진행 내용을 정리한 글입니다. 0. 스터디 공지 사항 참석자 49 명 서기 및 공유 서기: 김현우님, 김성원님 공유: 이민욱님 진도 리눅스 커널 내부구조 (백승재, 최종무 저) 82g. 1. 프로세스,
5. 태스크 문맥 앞서 모든 프로세스와 쓰레드는 태스크로 관리되며 이는 구조체로 저장된다고 얘기했다. 그럼 위 구조체에는 오직 TID 와 TGID 만 존재할까? 아니다, 절대 그렇지 않다. 태스크를 관리하기 위해 필요한 정보는 이보다 훨씬 많다. 태스크는 실행 중
2021년 06월 12일 15:00 ~ 22:00 스터디 진행 내용을 정리한 글입니다. 0. 스터디 공지사항 참석자 45 명 서기 및 공유 진행: 문영일님 서기: 김현우님, 김성원님 공유: 이민욱님 영상: 최영민님 해설: 류효은님 진도 리눅스 커널 내부구조
가상 메모리(Virtual memory) 는 물리 메모리(Physical memory) 의 한계를 극복하기 위해 나온 기법이다. 가상 메모리는 실제 시스템에 존재하는 물리 메모리의 크기와 관계없이 가상적인 주소 공관을 사용자 태스크에게 제공한다.32 bit 의 경우:
2021년 06월 19일 15:00 ~ 22:00 스터디 진행 내용을 정리한 글입니다.40 명진행: 문영일님서기: 김현우님, 김성원님공유: 이민욱님영상: 최영민님리눅스 커널 내부구조 (백승재, 최종무 저) zone 은 자신에 속해 있는 물리 메모리를 관리하는데, 이 물
각 태스크는 task_stuct 라는 자료구조를 통해 관리되고, 고유한 가상 메모리 역시 mm_struct 를 통해 관리되어 진다. mm_struct 자료구조는 크게 세 부분으로 구분되어진다.태스크를 구성하고 있는 vm_area_struct같은 속성의 연속된 메모리
1. 커널 주소 공간 커널 주소 공간 역시 페이징을 사용(이는 가상 공간을 사용한다는 것을 의미)하고, 이를 위한 데이터를 부팅 시점에 전역 변수 swapperpgdir 에 저장하여 사용한다. 32 비트 가상 주소 공간 64 비트 가상 주소 공간 Direct
리눅스 커널은 파일 시스템과 태스크 사이에 가상적(virtual) 층을 도입하였다. 이 가상의 층은 서로 다른 파일 시스템을 추상화하여 통일화된 인터페이스를 제공한다. 따라서 프로그래머는 현재 리눅스에서 어떤 파일 시스템을 사용하는지 신경 쓰지 않고 open(), r
1. 시스템 호출 처리 과정 시스템 호출(system call) 이란 사용자 수준 응용 프로그램에게 커널이 자신의 서비스를 제공하는 인터페이스이다. 리눅스 커널은 각 시스템 호출을 함수(시스템 호출 핸들러)로 구현해놓고, 각 시스템 호출이 요청되었을 때 대응되는 함
6. 디바이스 드라이버 유닉스 계열 시스템에서 일반적인 장치 파일(`regular file`) 을 포함해 모니터, 키보드, 마우스 디바이스 등도 모두 파일로 취급한다. 따라서 리눅스는 사용자 태스크가 접근하려는 파일의 종류와 관계없이 일관된 인터페이스(`clos
크게 어려운 내용은 없고, run() 함수에 핵심적인 코드가 담겨있다. shell 프로그램이 입력받은 명령어를 확인하고, 해당 명령어가 builtin_commands 경우 미리 정의된 동작을 실행, 존재하지 않는 명령어의 경우 execvp() 함수를 통해 실행한다. e
운영체제의 스케줄러를 C 를 통해 구현하는 방법을 소개한다. 스케줄러 자체가 복잡하므로 코드 분량의 압박이 조금 있지만 하나 하나 뜯어보면 크게 어렵지 않다. 함수 및 일부 라인에 주석을 달아 설명을 첨부하였다. 1. 소스코드 main.c main.c 코드는 thr
Linux Kernel 의 buddy allocator 를 구현한 코드이다. 책에서 나온 코드를 바닥부터 뜯어 고쳐서 원본 코드랑 완전히 달라졌으나 그 기저의 동작 방식은 그대로 남겨 놓았다. 코드 해설은 소스 코드 내의 주석으로 달아 놓았기에 생략하겠다.책 리눅스 커
코드가 3,000 라인이 넘어가는 관계로 코드 분석을 파트별로 나누어 진행하려 한다. main 함수부터 순서대로 따라가되 맥락 별로 하부 내용을 생략하려 한다. 1. main.c - main() main 에서 하는 일은 별거 없다. shell 객체의 생성, 실행,
여기에서는 이후 FAT 와 File System 코드에서 사용하게 될 자료구조인 Doubly Linked List 와 Shell Entry 그리고 Shell Entry List 자료구조에 대해 소개하려 한다. 1. Doubly Linked List Linux Ke
shell_filesystem 코드는 shell 과 FAT 사이를 이어주는 징검다리이다. shell 측에선 추상화된 filesystem 의 코드를 호출하고 filesystem 은 실질적인 구현인 FAT 의 코드를 호출하게 된다. 이러한 방식이 상당히 복잡하고 또 불필
사실 지금까지의 모든 내용은 FAT File System 의 편린이였다. 솔직히 설명할 내용도 많지 않았고 그 내용도 매우 쉬웠다. 좀 나쁜 말 섞어셔 얘기하면 fat.c 부터가 존나게 지랄맞다. 3,000 라인 중 1,500 라인이 fat.c 이므로 말 다 했다.
가상화는 물리적인 자원과 사용자가 사용하는 자원을 분리하는 것이다. 가상화는 물리적인 자원과 논리적인 자원을 구분하며, 이를 위해 가상화 층(virtualization layer)을 도입한다. 이 층은 실제 물리적인 자원의 복잡함을 숨기고 단일하며 일관된 가상 자원
 이유는 모르겠으나 Xen 을 설치하는 것만으론 Xen 가상화 시스템을 통한 부팅이 이뤄지지 않는다. 설치 이후에 몇 가지 설정을 더 잡아줘야 정상적으로 부팅이 가능하다. 그 방법을 아래에 기술하려 한다.  필자는 UEFI, x86-64, Fedor
 앞 장의 글을 읽고 설치를 따라했다면 grub 부트로더가 Xen 으로 부팅을 잡아준다. 위와 같은 화면이 나오면 부트로더가 제대로 Xen 을 잡아줬다는 뜻이다. 필자는 맨 위의 Fedora, with Xen 4.15.2 and Linux 5.16.16-2
1. 플래시 메모리란(Flash memory)? > 플래시 메모리(영어: flash memory, 문화어: 흘래쉬기억기, 전기일괄소거형기억기)는 전기적으로 데이터를 지우고 다시 기록할 수 있는(electrically erased and reprogrammed) 비휘발성