전체 글 289

MintOS 32-bit 보호모드 전환

자.. 이제 부트로더를 다 만들어 봤으니 32비트 보호모드로 점프 뛰어보자. 보호모드로 전환하려면 아래의 6가지 단계를 거쳐야 한다. 세그먼트 디스크립터 생성, GDT 정보 생성 단계는 보호 모드 전환에 필요한 자료구조를 생성하는 단계이고, 그 다음 프로세서에 GDT 정보 설정 ~ 각종 세그먼트 셀렉터 및 스택 초기화 단계에서는 생성된 자료구조를 프로세서에 설정하는 단계이다. 세그먼트 디스크립터와 GDT는 보호모드가 실행되자 마자 즉시 프로세서에서 참조하는 부분이니까 보호모드로 전환하기 전에 미리 우리가 이 두가지 자료구조들은 생성을 해두어야 한다. 1. 세그먼트 디스크립터 생성 세그먼트 디스크립터 생성부터 해봅시다. 이 놈은 세그먼테이션에서 세그먼트의 정보를 나타내는 자료구조이다. 먼저 우리가 사용할 ..

MintOS 부트 로더 제작

간단한 부트로더를 제작해보자. 대표적인 부트로더로 리눅스 운영체제 많이 들어가는 GRUB, LILO 등이 있다. 저번에 설명했듯이, 부트로더는 저장 매체 (HDD 등.)에 들어있다고 했다. 부트로더는 MBR (Master Boot Record) 라는 곳에 있는 코드이다. 매우 작은 프로그램이다. MBR은 OS가 설치되어 있는 저장매체 즉, 하드 디스크의 가장 첫번째 섹터를 MBR 이라고 한다. 섹터(Sector)는 굳이 설명을 해야 할까 싶긴한데.. 디스크를 구성하는 데이터의 단위이다. 크기는 512byte 부트로더의 가장 큰 역할은 OS 실행에 필요한 환경 설정 OS 이미지를 메모리에 복사 요 두가지 기능이다. 부트로더가 아주 많은 기능을 할 것 같이 생겼지만, 하나의 섹터에서 코드가 해봐야 뭐 얼마나..

MintOS 부팅 과정

먼저 부팅(Booting)이 뭔지.. 그냥 컴퓨터 켜는게 부팅이라고 생각할 수 있는데, 정확하게 알고 넘어가자. 부팅(Booting)이란, PC 전원이 들어온 후 운영체제가 실행되기 전의 과정을 얘기한다. 윈도우로 치면 그 윈도우 로고가 팔랑팔랑거리기 전까지를 부팅 과정이라고 하는 것이다. 이 과정에서는 프로세서 초기화, 메모리와 외부 디바이스 검사 및 초기화, 부트 로더 호출하고 OS 시작 등의 작업을 한다. 그냥 쉽게 모든 것을 초기화하고 OS를 로딩하는 과정이다. 부팅 과정에서 H/W 관련된 작업들을 BIOS (Basic Input/Output System)이 수행하고, 이놈이 하는 각종 작업들을 POST (Power on Self Test) 라고 한다. 뭐 그냥 이렇게 부른다. BIOS는 펌웨어다..

OS 메모리 관리 기법

세그먼테이션은 우리가 필요한 만큼 분할해서 메모리를 관리하는 것이고, 페이징은 이미 기존에 일정한 크기로 잘려있는 크기로 메모리를 관리하는 것이다. 책에서는 세그먼테이셔는 케이크, 페이징을 잘려 있는 식빵에 비유했다. 적절한듯. 메모리 관리 기법을 이용하려면 관련된 레지스터에 특정한 자료구조를 설정해야 된다. 세그먼테이션은 세그먼트 레지스터에 세그먼트 시작주소 or 세그먼트 디스크립터의 위치를 지정해야 한다. 세그먼트 디스크립터 테이블(SDT)에 대해서 다루지 않고 넘어갔다. 여기서 설명하려고 아껴두었음. 페이징은 컨트롤 레지스터 중에 CR3 레지스터의 페이지 디렉토리라 불리는 자료구조의 물리주소를 설정해야 한다. 뭐 이정도로 알고 이제 상세하게 메모리 기법에 대해 알아보자. 운영 모드별로 어떠한 메모리..

레지스터 (Register)

레지스터란? CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 다목적 공간이다. 프로세스 내부에 있는 작은 공간이고 연산 제어, 디버깅 등등의 목적으로 사용한다. 일반적으로 얘기하는 RAM과는 다르다. CPU가 RAM에 있는 데이터에 접근하기 위해서는 물리적으로 먼 길을 돌아가야 하는데, 레지스터를 이용하면 고속으로 데이터를 처리할 수 있다. 연산을 위한 데이터를 레지스터에 저장하고, 그 결과값도 레지스터에 저장한다. 속도가 엄청 빠르다 레지스터 > 메모리 > 하드디스크 레지스터는 64/32비트 머신을 구분하는 기준으로, 한번에 처리할 수 있는 비트 수이다. 레지스터의 데이터 단위는 다음과 같다. BIT 데이터를 표현할 수 있는 가장 작은 단위이다. 0과 1로 구분된다. BYTE 8개의 비트..

반응형