본문 바로가기

OS11

[32bit] 부트섹터에서 프로그램 꺼내기(1) 목차 코드를 이해하기 위한 레지스터 코드를 이해하기 위한 어셈블리어 코드를 이해하기 위한 레지스터 n-bit 레지스터란, n자리의 이진수를 저장할 수 있는 하드웨어입니다. CPU에 내장되어 있습니다. 포인터 레지스터 ip : 다음에 실행할 명령어를 가리키는 포인터 레지스터 ( instruction pointer ). 바로 다음 주소의 명령어를 가리키고 있습니다. 범용 레지스터 ax : 주 누산기(primary accumulator)인 ax는 주로 입출력과 대부분의 산술 연산에 쓰입니다. eax(extended ax)의 하위 16비트. ax의 상위 8비트를 ah, 하위 8비트를 al 이라고도 합니다. cx : 카운트 레지스터. 루프 반복의 횟수 혹은 쉬프트 연산 횟수를 저장하는 데에 쓰입니다. ecx(ex.. 2021. 7. 27.
[32bit] 첫 걸음, 부트스트랩( Bootstrap ) 목차 부트스트랩이 뭔가요? 부트스트랩 과정 부트스트랩이 뭔가요? OS 분야에서 부트스트랩은 CPU에 전원이 들어오고 나서, OS 커널이 로드되기까지 외부 입력 없이 스스로 진행하는 일련의 과정을 뜻합니다. 다른 분야에서도 각각 다른 의미로 쓰이는 용어이니, 혼동 없으시길 바랍니다. 부트스트랩 과정 일반적인 PC의 부트스트랩 과정을 살펴보겠습니다. reset vector : CPU가 전원이 들어오면, 가장 먼저 확인하는 장소. 이곳에서 첫 명령어를 확인합니다. 롬처럼 각인된( hard-coded ) 레지스터가 있어 전원이 들어오지 않더라도 저장된 명령어 값이 유지됩니다. jump 명령어를 통해 바이오스( BIOS )로 실행 흐름을 넘겨줍니다. BIOS ( Basic Input/Output System ) .. 2021. 7. 27.
[32bit] 개발환경 구축하기 - Vmware 설치하기, VS code 소개 Vmware가 뭔가요? vmware는 가상머신으로, 이 가상머신 위에서 작성한 OS커널을 구동해볼 것입니다. Vmware 설치하기 https://www.vmware.com/kr/products/workstation-player/workstation-player-evaluation.html Installer를 다운 받으신 후, 설치해주시면 됩니다. VS code 소개 왜 쓰나요? 텍스트 에디터와 cmd를 동시에 사용할 수 있어 편리합니다. 코드 하이라이트 기능이 있습니다. 아래 주소에 접속해주세요. https://code.visualstudio.com/ Installer를 다운 받으신 후, 설치해주시면 됩니다. 간단한 사용법을 알려드리겠습니다. 먼저 원하시는 위치에 폴더를 만들어주세요. 저는 바탕화면에 o.. 2021. 7. 27.
[32bit] 개발환경 구축하기 - nasm 설치하기, 환경변수 설정하기. nasm이 뭔가요? 어셈블리어를 기계어로 바꾸어주는 '어셈블러'이자 '역어셈블러'입니다. 마치 C언어 코드를 기계어로 바꿔주는 컴파일러처럼 어셈블리 코드를 기계어로 바꾸어줍니다. 또, nasm을 이용해 기계어 코드를 어셈블리 코드로 바꿀 수 있습니다. nasm 설치하기 사이트에 접속합니다. https://www.nasm.us/ NASM Latest version Stable 2.15.05 History Builds List Snapshots Latest, List For users of RPM-based Linux distributions (e.g. Fedora, Red Hat, SUSE, ...), you can download the official NASM builds using dnf or yum.. 2021. 7. 27.
만들면서 배우는 OS커널의 구조와 원리 - 들어가며 안녕하세요. 올리고당입니다. 이번 방학에는 OS를 공부하며 시간을 보내려 합니다. "만들면서 배우는 OS 커널의 구조와 원리 -김범준 저" 책을 참고하여 공부하고 있습니다. 현재는 절판돼서 중고로 구할 수밖에 없네요. 책은 2005년 기준으로 작성된 거라, 현시점과 괴리가 있는 부분은 다른 블로그의 글들을 참고했습니다. 다만, 조금 아쉬운 점이 있었습니다. 책에서는 플로피 디스크에 작성한 커널을 삽입해 컴퓨터로 실행해보는 과정이 있었지만, 블로그에서는 가상 머신을 이용하여 시뮬레이션해 보았습니다. 그래서 저는 한발 더 나아가, 흥미로운 목표를 몇 가지 설정했습니다. 1. Assembly와 Rust언어를 이용해 OS 커널을 구현한다. 2. Raspberry pi(라즈베리파이)에 구현한 OS 커널을 로드한다.. 2021. 7. 27.