본문 바로가기

SW 사관학교 JUNGLE/개발일지

(4)
[PintOS-KAIST]Project3: Virtual Memory preview 이번 핀토스 프로젝트 3의 주제인 가상메모리 구현에 앞서 알아야 할 몇가지 사전 지식들을 정리하려고 한다. 가상 메모리가상 메모리는 물리 메모리(실제 메모리)의 크기와 상관없이 메모리를 이용할 수 있도록 지원하는 기술이다. 프로그래머는 가상 메모리 덕분에 물리 메모리의 크기에 구애받지 않고 작업할 수 있는 커다란 공간을 얻게 되는 셈이다. 즉, 가상 메모리(virtual memory)는 크기가 다른 물리 메모리에서 일관되게 프로세스를 실행할 수 있는 기술이다.가상 메모리를 사용하면서 실제 물리 메모리에 연결하는과정이 필요한데,이러한 작업을 동적 주소 변환(Dynamic Address Translation, DAT)라고 한다. 동적 주소 변환을 거치면 프로세스가 아무 제약 없이 사용자의 데이터를 물리 메모..
[PintOS-KAIST]Project2: SYSTEMCALL(1) project2의 핵심내용인 systemcall에 대해서 작성을 해보도록 하겠다. systemcall이란 운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 보통 c나 c++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다. 즉, 운영체제 서비스에 접근하기 위한 유일한 수단인 소리이다. 그럼 이러한 systemcall이 필요한 이유는 무엇일까?사용자가 직접적으로 하드웨어 장치를 제어한다면 큰 문제가 발생할 수 있다. 따라서 사용자 어플리케이션은 System Call 을 통해 직접적인 H/W 요청이나 중요한 시스템 요청을 하는 것이다.우리가 일반적으로 사용하는..
[PintOS-KAIST]Project1:preview 본격적으로 project1을 하기 위한 전반적인 코드 분석 및 flow 이해를 하기위한 포스트이다.pintos의 경우 굉장히 많은양의 코드(대략 기본 코드가 2만줄이라고한다,,,)와 많은 파일들이 있기에 전반적이 flow 이해와 더불어 구현해야할 부분에 대한 코드분석이 우선이라고 생각했다.실제로 2일동안은 코드 한줄 작성하지 않고 코드분석과 flow이해를 위한 기본적인 개념공부와 더불어 gdb를 이용해 test를 돌려보면서 한줄 한줄 뜯어보면서 확인했다.(alarm-multiple)확인하는 방법은 main()에서 thread_start()에 breakpoint를 찍고 한줄한줄 step over,into,out을 반복하며 확인했다.(실제로 into를 깊게 들어가면 어셈블리어까지 있다.... 이론적으로 공부..
[PintOS-KAIST]Loading PintOS의 project 과제를 수행하기전에 PintOS가 어떻게 구동되는가를 먼저 확인하겠다.로딩은 PintOS의 Loader 실행과 Kernel의 초기화 작업을 한다.여기서 Loading이란 os 실행시 진행되는 부팅과정이다. 부팅은 컴퓨터가 구동하여 기초적인 초기화 작업 진행 후 운영체제를 읽어오는 과정이다.부트 섹터는 방금 언급한 기초적인 초기화 작업과 운영 체제를 읽어서 메모리에 올리고 수행시키는 작업에 대한 코드가 작성된 프로그램이 기록된 섹터로 장치의 첫 번째 트랙의 첫 번째 섹터이다.Loader는 부팅을 진행하는 프로그램으로 Disk의 첫번째 Track의 첫번째 Sector에 저장되어있다. 1.BIOS가 컴퓨터 구동후 첫번째 Sector를 탐색하여 부팅 가능한지 검사(첫번째 Sector..