본문 바로가기

운영체제 정리/64비트 OS 만들기 실습

[64비트 멀티코어 OS 원리와 구조] 7장 - C언어로 코드를 작성하자 이번 장에서 해야 할 일 1. C소스 파일 추가 2. 1을 빌드하여 보호 모드 커널 이미지에 통합 실제로 하는 일은 C언어로 작성한 커널을 보호 모드 엔트리 포인트의 뒷부분에 연결하고 엔트리 포인트에서는 C 커널의 시작부분으로 이동하는 것이 전부 7.1 실행 가능한 C 코드 커널 생성 방법 - C코드는 컴파일과 링크 과정을 거쳐서 최종 결과물이 생성된다. - 컴파일 과정은 소스 파일을 중간 단계인 오브젝트 파일로 변환하는 과정으로 소스 파일을 해석하여 코드 영역과 데이터 영역으로 나누고, 이러한 메모리 영역에 대한 정보를 생성하는 단계다. - 링크 단계는 오브젝트 파일들의 정보를 취합하여 실행 파일에 통합하며, 필요한 라이브러리 등을 연결해주는 역할을 하는 단계. 엔트리 포인트가 C 코드를 실행하기 위한.. 더보기
[64비트 멀티코어 OS 원리와 구조] 6장 - 32비트 보호모드로 전환하자 6.1 세그먼트 디스크립터 생성 - 세그먼트 디스크립터란, 세그먼테이션 기법에서 세그먼트 (메모리 공간을 임의의 크기로 나눈 영역)의 정보를 나타내는 자료구조. - 리얼 모드의 세그먼트 레지스터라는 명칭이 보호 모드에서 세그먼트 셀렉터라는 이름으로 바뀜. 세그먼트 디스크립터 - 코드 세그먼트 디스크립터: 실행 가능한 코드가 포함된 세그먼트에 대한 정보. CS 세그먼트 셀렉터에 사용됨 - 데이터 세그먼트 디스크립터: 데이터가 포함된 세그먼트에 대한 정보. CS 세그먼트 셀렉터 제외 나머지 셀렉터에 사용 가능 - 우리 OS에서 필요한 세그먼트 ㄴ 커널 코드와 데이터용 세그먼트 디스크립터 각 1개 ㄴ 커널 코드와 데이터용 세그먼트 디스크립터는 0 ~ 4GB까지 모든 영역에 접근할 수 있어야 함 ㄴ 보호 모드용.. 더보기
[64비트 멀티코어 OS 원리와 구조] 5장 - 플로피 디스크에서 OS 이미지를 로딩하자 - BIOS 기능을 사용해서 플로피 디스크를 제어하자 - 가상 OS 이미지를 만들고 로딩한다 5.1 BIOS 서비스와 소프트웨어 인터럽트 - BIOS의 기능은 소프트웨어 인터럽트를 호출해서 사용한다. - 인터럽트 벡터 테이블은 메모리 어드레스 0에 존재한다. 테이블의 각 항목은 인덱스에 해당하는 인터럽트가 발생했을 때 처리하는 함수 어드레스가 저장되어 있으며, 4바이트다. - 인터럽트는 최대 256개까지 설정 가능하다. 그래서 리얼 모드의 인터럽트 벡터 크기는 최대 1024 바이트다. - BIOS는 레지스터 방식으로 파라미터와 결과값을 주고받는다. AX, BX, CX, DX 레지스터와 ES 세그먼트 레지스터를 사용해서 파라미터를 넘겨주며 결과값도 레지스터를 통해 넘겨 받는다. 디스크 구조 (3.5인치, .. 더보기
[64비트 멀티코어 OS 원리와 구조] 4장 - 내 PC를 부팅하자 4.1 부팅과 부트로더 - 부트로더는 OS의 나머지 코드를 메모리에 복사해 실행시킨다. 부트로더는 대부분 512바이트의 코드다. - 부팅은 PC가 켜지고 OS가 실행되기 전까지 수행되는 일련의 작업 과정이다. 프로세서 초기화, 메모리와 외부 디바이스 검사 및 초기화, 부트로더를 메모리에 복사하고 OS를 시작하는 과정등이 포함된다. - 부팅 과정에서 하드웨어 관련 작업은 BIOS가 담당하고, 여기서 하는 각종 테스트나 초기화를 POST라고 한다. - BIOS는 메인보드에 포함된 펌웨어의 일종으로, 보드에 롬이나 플래시 메모리 형태로 존재하고, 전원이 켜지면 프로세서가 가장 먼저 실행하는 코드다. - 여기서 가장 중요한 작업은 부트로더 이미지를 메모리로 복사하는 단계다. 이 단계는 우리가 BIOS에서 처음으.. 더보기
[64비트 멀티코어 OS 원리와 구조] 2장 - OS 개발 환경을 구축하자 나는 맥을 사용하기 때문에 환경설정은 이 책을 보고 따라하기 힘들었음 (책은 윈도우 기반) 그래서 아래 내용도 맥 기준으로 다시 작성하였습니다. 1. GCC 설치 - GCC는 GNU Compiler Collection. 무료로 사용할 수 있는 컴파일러 관련 프로그램의 집합. (공식 사이트: https://gcc.gnu.org/) - mac os는 리눅스 계열이므로 gcc가 설치되어 있을 수 있음. - 확인은 c 확장자 파일을 생성해서, c언어를 이용해서 아무 코드나 작성해 놓고, 아래 명령어로 컴파일이 되는지 확인하면 된다. gcc -m32 -o test32 test.c gcc -m64 -o test64 test.c gcc - 컴파일 명령어 -m32 옵션: 32비트용 코드를 생성(참고: https://g.. 더보기
[64비트 멀티코어 OS 원리와 구조] 1장 - OS 개발을 위한 힘찬 첫걸음 실습 과정을 다른 카테고리에도 작성했지만, 이 카테고리에서는 책을 더 천천히 살펴보고 이론/실습 섹션으로 나눠서 내 나름대로 정리를 해보려고 한다. (책만 배끼는 수준이 아닌) 현재 나는 64비트 멀티코어 OS 원리와 구조 1권의 10장까지 구현한 상태이다. 나는 맥 환경에서 작업하고, 책은 윈도우에서 작업 + 11년 전 상황의 조합이라 몇몇개는 잘 동작하지 않는 부분이 있었는데, 이 부분에서 내가 삽질하면서 찾은 내용까지 기록하려고 한다. 1장의 책 내용은 따로 정리할 건 없고, OS 개발을 시작하는 독자에게 저자가 용기를 주는 세션이다. OS 개발하는 과정에서 얻을 수 있는 세 가지 1. 하드웨어와 소프트웨어를 모두 다뤄볼 수 있다. 2. OS의 기능을 실제로 구현하면서 문제 해결 능력을 기를 수 있.. 더보기