개발 관련 책 읽기/리눅스 커널 내부구조(13)
-
Chapter 6 - Interrupt/Trap & System call(2)
시스템 호출 처리 과정 시스템 호출이란 유저 레벨 응용 프로그램들에게 커널이 자신의 서비스를 제공하는 인터페이스이다. 따라서 사용자가 운영체제의 기능이나 모듈을 활용하기 위해서는 반드시 시스템 콜을 사용해야 한다. 시스템 콜은 커널로의 진입점(Entry Point)라고 볼수 있다. 대표적으로 sys_fork(),sys_read()등이 있다 커널은 각 시스템 콜을 함수로(시스템 콜 핸들러) 구현해 놓고 각 시스템 콜이 호출되었을 때 헨들러를 호출하여 서비스를 제공한다. (위의 그림을 참고하면서) 유저 프로세스가 fork() 시스템 콜을 요청했다고 가정해보자. 그러면 표준 C 라이브러리의 fork()라는 함수가 호출된다. 이 함수는 사용자 대신에 트랩을 요청한다 이 라이브러리 함수는 CPU내의 범용 레지스터..
2022.09.19 -
Chapter 6 - Interrupt/Trap & System call(1)
인터럽트 인터럽트란 주변 장치와 커널이 통신하는 방식 중의 하나로,주변 장치나 CPU가 자신에게 발생한 사건을 리눅스 커널에게 알리는 매커니즘이다.외부에서 네트워크를 통해 패킷이 도착했을음 알리기 위해,혹은 키보드가 눌렸음을 알리기 위해서 등 다양한 이유로 인터럽트가 발생된다. 인터럽트가 발생하면 Kernel은 어떠한 이유로 인터럽트가 발생했는지 살펴보고 인터럽트 핸들러를 호출해 작업을 처리해야 한다. 만약 네트워크 장치(LAN카드)로부터의 인터럽트라면 패킷을 수신하여 TCP/IP 스택을 통해 데이터를 수신하고,키보드 인터럽트라면 어떤 키가 눌렸느지 확인하여 응용 S/W에게 전달해준다. 인터럽트는 외부 인터럽트와 트랩으로 나뉘게 된다. - 외부 인터럽트 : 주변장치에서 발생된 비동기적인 하드웨어 even..
2022.09.19 -
Chapter 5 - 파일 시스템(3)
가상 파일시스템(Virtual File System) 태스크는 어떻게 파일시스템에 접근할까? 태스크는 open(),read(),write(),close() 등의 시스템 콜을 사용해 파일시스템에 접근한다. 파일시스템 자체는 특정 운영체제에 구애받지 않고(심지어 운영체제가 없는 상황에서도) 동작 가능한 독립적인 구조로 설계되고 구현되어야 한다. 사용자 태스크는 자신이 접근하는 파일이 어느 파일시스템에 저장되어 잇는지 굳이 알 필요가 없이 일관된 POSIX 표준 인터페이스만을 사용하는 것이 가능해진다. 사용자 태스크는 VFS라는 가상적인 '파일시스템만'을 알고 있으면 충분하다. 따라서 사용자 태스크 입장에서 본다면 VFS는 가상적이긴 하지만 실제 접근을 하게 되는 '파일시스템'인 것이다. 이 가상적인 파일시스..
2022.09.19 -
Chapter 5 - 파일 시스템(2)
파일시스템이 관리하는 데이터는 크게 Meta Data / User Data로 구분할 수 있다. FAT 파일시스템에서 메타데이터는 FAT 테이블,디렉토리 엔트리 그리고 수퍼 블록으로 구성된다. 파일시스템은 각 파일마다 디렉터리 엔트리를 하나씩 갖는다. 이것은 마치 태스크가 하나 생성되면 task_struct라는 구조체를 통해 각 태스크를 관리하는 것과 유사하다. 디렉터리 엔트리가 모여 디렉터리를 구성한다. 리눅스에서는 디렉터리와 파일은 별도 구분 없이 파일로 취급한다. 결국 디렉터리는 자신이 포함하는 파일의 이름들을 데이터로 가지고 있는 특수한 파일에 불과하다. 각 파일시스템은 저마다 자신만의 디렉터리 구조체를 선언해 놓은 뒤,파일이 생성될 때 이 구조체의 각 내용들을 채워서 디스크에 저장한다. 나중에 사..
2022.09.19 -
Chapter 5 - 파일 시스템(1)
파일시스템 메모리 관리 기법은 주 기억 장치를 관리하는 소프트웨어이고, 파일시스템은 보조 기억 장치라고 불리는 저장 장치를 관리하는 소프트웨어이다. 주 기억장치는 RAM과 같은 장치 보조 기억 장치는 주로 하드 디스크와 같은 장치가 사용된다. 메모리 관리 기법과 파일시스템은 모두 한정된 자원(기억장치)를 효율적으로 사용하기 위해 고안된 기법이므로 내부/외부 단편화를 최소화하기위해 노력한다. 그러면 파일시스템과 메모리 관리 기법의 차이점은 무엇일까? 본질적으로 본다면 차이점이 미비하고 파일시스템은 '이름'이라는 특성을 제외하곤 둘다 같은 형식이다. 파일시스템은 유저에게 이름이라는 속성으로 접근되는 추상적인 객체인 파일 이라는 개념을 제공함으로써 영속적인 객체의 저장을 지원하는 소프트웨어인 것이다. 조금 다..
2022.09.19 -
Chapter 4 - 메모리 관리(3)
가상 메모리 관리 기법 태스크는 자신의 고유한 가상 메모리를 갖는다. 따라서 커널은 태스크의 가상 메모리가 어디에 존재하는지 관리를 해야 한다. 즉,어디에 text영역이 있고 어디에 data영역이 있는지,그리고 어느 영역이 사용 중이며 어느 영역이 사용 가능한지 등의 정보를 알고 있어야 한다. task_struct 자료구조에 가상메모리 관련된 정보가 저장되어 관리된다. task_struct의 mm이라는 필드에 가상메모리 관련 내용이 담겨있다. // include/linux/mm_types.h struct mm_struct { struct vm_area_struct *mmap; struct rb_root mm_rb; struct vm_area_struct *mmap_cache; atomic_t mm_use..
2022.09.19