개발 관련 책 읽기(46)
-
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 -
Chapter 4 - 메모리 관리 (2)
각각의 zone은 자신에 속해 있는 물리 메모리들을 관리하는데, 바로 이 물리 메모리의 최소 단위를 페이지 프레임이라 부른다. 각각의 페이지 프레임은 page라는 구조체에 의해 관리된다. 커널은 시스템 내의 모든 물리 메모리에 접근 가능해야 한다. 이를 위해 모든 페이지 프레임 당 하나씩 page 구조체가 존재한다. 시스템이 부팅되는 순간에 물리 메모리의 특정 위치에 로드 된다. 이 위치는 mem_map이라는 전역 배열을 통해 접근 가능하다. Buddy&Slab 리눅스는 page frame, zone, node라는 구조를 통해 시스템에 존재하는 전체 물리 메모리를 관리할 수 있다. 그럼 리눅스는 자신이 가지고 있는 물리 메모리를 어떻게 할당 또는 해제할까? 리눅스는 물리 메모리의 최소 관리 단위인 pag..
2022.09.19 -
Chapter 4 - 메모리 관리(1)
초창기에 컴퓨터가 개발될 때부터 사용자는 시스템에 물리적으로 존재하는 것보다 더 많은 양의 메모리를 필요로 해 왔다. 물리 메모리의 한계를 극복하기 위해 많은 기법들이 개발되었는데, 그중에서 가장 성공적이며 지금도 대부분의 시스템에서 사용하는 방법이 가상 메모리이다. 가상 메모리는 실제 시스템에 존재하는 물리 메모리의 크기와 관계없이 가상적인 주소 공간을 사용자 태스크에게 제공한다. 32bit CPU의 경우 주소 지정할 수 있는 최대 크기인 232 크기(4GB)의 가상 주소 공간을 사용자에게 제공하며, 64bit CPU의 경우 264(16EB)의 주소 공간을 사용자에게 제공한다. 그런데 한 가지 주의해야 할 것은 물리적으로 4GB의 메모리를 모두 사용자 태스크에게 제공하는 것이 아니라는 점이다. -물리 ..
2022.09.19 -
Chapter 3 - 태스크 관리(4)
스케줄링에 대해서 알아보도록 하자 스케줄링은 여러 개의 태스크들 중에서 다음번 수행시킬 태스크를 선택하여 CPU라는 자원을 할당하는 과정을 말한다. 리눅스의 태스크는 실시간 태스크와 일반 태스크로 나뉘며 각각을 위한 별도의 스케줄링 알고리즘이 구현되어 있다. 실시간 태스크는 항상 일반 태스크 보다 우선하여 실행됨을 알아야 한다. 일반적으로 OS는 스케줄링 작업 수행을 위해, 수행 가능한 상태의 태스크를 자료구조를 통해 관리한다 리눅스에서 이 자료구조를 런 큐 라고 한다. 런큐는 한 개 혹은 여러 개 존재할 수 있으며, 자료구조의 모양이나 괸리 방법 역시 달라진다. 태스크가 처음 생성되면 init_task를 헤드로 하는 이중 연결 리스트에 삽입된다. 리눅스 시스템에 존재하는 모든 태스크들은 int_task..
2022.09.19 -
Chapter 3 - 태스크 관리(3)
프로세스 또는 쓰레드마다 task_struct라는 자료 구조가 필요함을 배웠다. 리눅스 커널은 태스크들마다 이러한 정보들을 관리하고 있다. 사실 태스크마다 필요한 정보는 훨씬 많다. 예를들어) 파일 디스크립터,시그널,CPU 사용량 등 많은 자원들의 정보를 관리 해야 한다. 이러한 모든 정보를 문맥이라고 부른다 태스크의 문맥은 크게 3가지로 분류가 된다. 1. 시스템 문맥 : 태스크의 정보를 유지하기 위한 커널이 할당한 자료구조들이다 (task_struct,파일 디스크립터,파일 테이블,세그먼트 테이블,페이지 테이블 등등..) 2.메모리 문맥 : 텍스트,데이터,스택,힙,스왑 공간 등이 여기에 포함된다. 3.하드웨어 문맥으로 문맥 교환(context switching)할 때 태스크의 현재 실행 위치에 대한 정..
2022.09.19