개발 관련 책 읽기/리눅스 커널 내부구조(13)
-
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 -
Chapter 3 - 태스크 관리(2)
위의 그림은 리눅스에서 프로세스와 스레드를 관리하기 위한 커널 자료 구조를 보여준다 리눅스에서는 프로세스가 생성되는 스레드가 생성되든 task_struct라는 자료구조를 생성한다 결국 리눅스 커널은 프로세스 or 스레드 중에서 어떤 것이 요청될지라도, 모두 task_struct 자료 구조로 동일하게 관리한다 단지 task_struct 자료 구조 중에서 수행 이미지를 공유하는가, 같은 스레드 그룹에 속해 있는가 등의 여부에 따라 프로세스 또는 스레드로 사용자에게 해석되는 차이가 있을 뿐이다. 결국 리눅스는 1대 1 모델 기반으로 한다 이러한 구현은 기존의 운영체제와는 다른 리눅스 특유의 태스크 개념을 유도한다 리눅스에서는 프로세스이던 스레드이던 커널 내부에서는 태스크라는 객체로 관리된다. 태스크가 관리하는..
2022.09.19 -
Chapter 3 - 태스크 관리(1)
태스크란 무엇일까? 프로세스나 쓰레드의 차이점은 무엇일까? 일반적인 운영체제 서적에서는 태스크를 자원소유권의 단위로 쓰레드를 수행의 단위로 정의한다 프로세스를 동작중인 프로그램 프로그램은 디스크에 저장되어 있는 실행 가능한 파일 형태이다 실행 파일 자체는 그저 디스크에 저장되어 있는 수동적인 존재에 불과하다 파일 형태로 존재하고 있는 프로그램이 수행되기 위해서는 리눅스 커널로부터 CPU등의 자원을 할당받을 수 있는 동적인 객체가 되어야 한다 . 이 동적인 객체가 프로세스이다. 결국 프로세스는 동작중인 프로그램이며, 커널로부터 할당받은 자신만의 자원을 가지고,CPU가 기계어 명령들을 실행함에 따라 끊임없이 변화하는 동적인 존재이다 32bit CPU경우 운영체제는 각 프로세스에게 총 4GB크기의 가상공간을 ..
2022.09.19