본문 바로가기

운영체제 정리

[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의 기능을 실제로 구현하면서 문제 해결 능력을 기를 수 있.. 더보기
[잡담] 공룡책 보기 시작 http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788998886813 운영체제 - 교보문고 컴퓨터 공학도를 위한『운영체제』는 모든 컴퓨터 시스템의 필수적 부분인 운영체제에 대한 개론서다. 운영체제가 무엇인지, 어떤 일을 하는지, 어떻게 설계되고 구축되는지를 설명한다. 현대 www.kyobobook.co.kr 위 책이다. 공룡책 9th. 공부하려고 사논건 엄청 옛날인데 (18년 상반기?) 이제 제대로 보려고 한다.. 3년 지났네. 정리는 나중에 손 가는대로 해야겠다. 더보기
쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 3, PART 4] 이전 글: 2021/01/11 - [운영체제 정리] - 쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 1, PART 2] Chapter 7 [연습문제] 1. 소스코드를 한 번에 번역하지 않고 한 행씩 번역하여 실행하는 방식을 무엇이라 하는가? 2. 프로그래머가 C나 자바로 소스코드를 작성하여 컴파일하면 일차적으로 만들어지는 코드는 무엇인가? 3. 컴파일할 때 코드에 라이브러리를 연결하지 않고 코드를 실행할 때 라이브러리를 가져와 실행하는 방식을 무엇이라 하는가? 4. 메모리 관리 정책 중 메모리가 꽉 찼을 때 메모리에 있는 어떤 프로세스를 내보낼지 결정하는 것은 무엇인가? 5. 32bit CPU를 사용하는 컴퓨터가 가질 수 있는 물리 메모리의 최대 크기는 얼마인가? 6. 절대 주소는 .. 더보기
쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 1, PART 2] 다음 글 : 2021/01/14 - [운영체제 정리] - 쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 3, PART 4] Chapter 1 [연습문제] 1. 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어는 무엇인가? - 운영체제 2. 가전제품과 같이 CPU의 성능이 낮고 메모리 크기도 작은 시스템에 내장하도록 만든 운영체제를 무엇이라고 하는가? - 임베디드 시스템 / 임베디드 운영체제 3. 사용자가 원하는 기능을 수행하기 위해 컴퓨터 자원을 사용하는 소프트웨어는 무엇인가? - 응용 프로그램 4. 운영체제가 없는 컴퓨터에서는 어떤 문제가 발생하는지 설명하시오 - 새로운 기능을 구현하려면 매번 회로를 변경해야 하고 복잡한 기능은 구현하.. 더보기
이화여대 운영체제 수업 3 - 2강(프로세스) 정리 프로세스 생성 부모 프로세스가 자식 프로세스 생성 트리구조 프로세스는 자원을 필요로 함 운영체제에서 받음 (보통) 부모와 공유 자원의 공유 (원칙적으로는 안함) 수행 1. 부모와 자식 공존하는 경우 2. 자식이 종료될 때까지 부모가 기다리는 경우 주소공간 자식은 부모의 공간을 복사함 그 공간에 새로운 프로그램을 올림 유닉스의 예 fork() 시스템 콜이 새로운 프로세스 생성 1. 부모를 그대로 복사 2. 주소 공간 할당 fork 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림 프로세스 종료 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 (exit) 자식이 부모에게 output data를 보냄 프로세스의 각종 자원들이 운영체제에게 반납됨 부모 프로세스가 자식의 .. 더보기