TIL - 2020.11.27 (금)

코드 굽는 제빵사·2020년 12월 1일
0

TIL

목록 보기
8/20
post-thumbnail

리눅스 커널 디자인의 기술을 읽으면서 책 내용 정리하기 (티스토리부터 이전 된 자료 입니다.)

디바이스 초기화와 프로세스 0 활성화

이제부터 메인 함수가 시작된다.
OS가 대기상태에 들어 가기 전 수행하는 모든 준비 작업들은 유저 애플리케이션들이 프로세스로서 정상적으로 실행되도록 하는 것이 제일 중요한 목적이다. 여기에는 세가지 관점이 있다. 애플리케이션이 호스트 PC에서 동작하도록 하는것, 주변 장치들과 연동하도록 하는 것 그리고 유저와 커뮤니케이션을 하는 인간-컴퓨터 상호작용이다.

리눅스 0.11은 멀티 프로세스를 지원하는 현대적인OS다. 즉, 유저 프로세스가 다른 프로세스를 조작하는 등의 어떤 영향도 줄 수 없다. 하지만 프로세스 자체는 자신을 보호할 보호 장치를 가지고 있지 않다.

루트 디바이스와 하드디스크 정보 설정

커널은 루트 디바이스와 하드디스크를 먼저 초기화한다.

물리적인 메모리 레이아웃, 버퍼 메모리, 램디스크 그리고 메인 메모리 설정

두번째로 커널은 버퍼 메모리, 램디스크, 그리고 메인 메모리를 설정한다. 메모리는 컴퓨터에 있어서 중요한 요소로 버퍼와 메인 메모리의 레이아웃은 모든 프로세스가 사용하는 방식과 전체 메모리 크기를 결정한다. 이것은 프로세스의 계산 속도에 영향을 준다.

램디스크 설정과 초기화

커널은 램디스크를 주변장치로 설정한다. 커널은 램디스크를 사용할지 말지를 판단하기 위해서 makefile에서 "ramdisk label"이 있는지 확인한다.

램 디스크(RamDisk)란?
메모리의 일부분을 사용하고자 하는 파티션으로 설정하는 것입니다. 마치 하디드스크처럼 메모리에 파일을 저장 할 수 있다는 것을 의미합니다.

메모리 관리 구조체 mem_map 초기화

메인 메모리의 시작 위치가 초기화되면서 메인 메모리와 버퍼 메모리 위치의 크기가 결정되었다.
먼저 커널은 메인 메모리를 위한 관리 구조체 mem_map을 사용해서 1MB 이상의 메모리를 페이지 단위로 관리하고 각페이지의 참조번호를 보관한다.

1MR 이하의 메모리 공간은 커널에 의해서만 관리되는 코드와 데이터를 위한 공간으로 유저 프로세스는 이곳에 접근 할 수 없다. 반면 1MB 이상의 메모리 공간, 특히 메인 메모리 영역은 유저 프로세스 공간이다.

인터럽트 서비스 루틴 바인딩

유저 프로세스와 커널은 종종 인터럽트를 사용하고 오버플로우, 영영 경계 확인, 페이지 폴트 예외 등 많은 예외 상황들을 처리하게 된다. 인터럽트 메커니즘은 시스템 콜에서도 광범위하게 사용되는 방식이다.

블록 디바이스의 리퀘스트 구조체 초기화하기

리눅스 0.11에서 주변 장치들은 두개의 범주 즉, 블록 디바이스와 문자 디바이스로 분류 할 수 있다.

블록 디바이스란?
저장 공간을 블록이라는 일정한 크기의 작은 부분들로 나눌 수 있는 디바이스를 뜻한다.
문자 디바이스란?
문자로 I/O 통신을 수행 할 수 있는 장치들이다. (키보드나 명령디스펠이 장치 등)

프로세스 0 초기화하기

프로세스 0은 리눅스에서 첫 번째 생성되는 프로세스이자, 리눅스를 동작시키이 첫 번째 부모 프로세스이기도하다. 리눅스 0.11의 중요한 지표는 멀티 프로세스를 지원하는 것이다. 즉, 멀티 프로세스 폴리을 할 수 있어야 한다. 시스템은 프로세스 0과 다른 프로세스들의 스케줄링을 위한 기본적인 환경을 만들기 위해서 타이머 인터럽트를 설정한다. 프로세스 0은 시스템 콜을 처리해야 한다. 프로세스들은 시스템 콜을 이용해서 커널과 소통하게 된다.

타이머 인터럽트 설정

타이머 인터럽트는 프로세스 0과 프로세스0이 생성하는 다른 프로세서들의 스케줄링의 기초를 제공한다.

버퍼 관리 구조체 초기화하기

버퍼는 주변 장치와 데이터를 교환하기 위한 중간 영역이다. 하드디스크가 메모리와 가장 큰 차이점은 디스크 비용이 낮으면서도 많은 데이터를 저장 할 수 있다는 점이다. 하지만 CPU가 직접 디스크를 엑세스 할 수 없기 때문에 디스크에 대한 작업을 바로 할 수 없다. 반면 메모리는 데이터를 저정하기 위해서 필요 할뿐 아니라 CPU와 버스를 이용한 데이터 처리까지도 할 수 있다. 하드디스크와 메모리 사이에는 버퍼가 있다. 버퍼는 데이터를 저장 할 수 있을 뿐 아니라 검색, 구조화, 기타 작업을 처리하는 데도 사용된다.
주변 장치에 버퍼가 만들어지고 나면 하드디스크는 요청에 따라서 버퍼를 이용해 데이터를 교환하는 것만 고려하면 된다. 더이상 메모리가 교환된 데이터를 사용하는지는 상관하지 않아도 된다. OS는 이들 간의 구조화, 관리 그리고 조화가 될 수 있도록 한다.

하드디스크 초기화하기

프로세스와 하드디스크 사이에 정보를 교환할 방법을 만들기 위해서 OS는 하드디스크를 초기화해야 한다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN