Pintos project 02 - intro

M4r()·2022년 1월 10일
0

운영체제는 크게 두 가지 목적을 가진다.

첫째, 잘못 코딩된 프로그램이나 나쁜 의도를 가지고 제작된 프로그램으로부터 시스템과 다른 프로그램들을 보호하는 것.
둘째, 복잡한데다가 작동방식마저도 다양한 여러 하드웨어들에 대해서 개발자가 일일히 고려할 필요 없이 단순한 메커니즘을 이용해 어플리케이션을 작성할 수 있도록 하는 것.

현대의 os는 하드웨어를 추상화 하여 이러한 목표를 달성하고 있는데, 하드디스크를 포함한 입출력장치는 파일로 가상화하고, 메인메모리는 가상메모리주소로, cpu는 가상화된 cpu를 통해 추상화를 한다는 내용의 강의를 들었다.
이에 대해 Cumputer System : A Programer’s Perspective에서는, 파일은 입출력장치에 대한 추상화가 맞지만, 가상메모리는 메인 메모리와 입출력장치가 결합된 추상화, 프로세서에 이르러서는 cpu와 메인메모리, 입출력장치 모두를 추상화 한 개념이라고 한다. 실제로 pintos에서 프로세스의 정보를 담고있는 thread 구조체를 뜯어보면 안에 cpu 안에 있는 레지스터의 상태를 저장하기 위한 공간, 가상메모리 주소 테이블이 있었고, 입출력장치의 상태를 저장하기 위한 파일 디스크립터 테이블 등을 추가로 구현해야 했다.

때문에 아주 단순한 기능을 추가하려 해도 생각보다 많은 부분을 손봐야 했는데, 현재 결과물을 보면 Os를 연구 하는 분들이 하드웨어를 단계별로 추상화하려고 많은 노력을 했지만 네트워크에 비해서는 생각보다 깔끔하게 분리되어 추상화 되어있지는 않아 조금 이해가 어렵긴 했지만, pintos의 두번째 프로젝트, user program을 통해 어플리케이션이 어떤 과정을 거쳐 프로세스가 되는지, 프로세스간에 어떤 식으로 문맥전환이 일어나고 프로세스를 실행시키기 위해 커널과 하드웨어가 어떤 준비를 하는지 살짝 엿볼 수 있는 과제였다.

profile
달리려고 해야 걸을 수 있다.

0개의 댓글