[회고] pintos project 2 - System Call

esmin·2021년 2월 18일

pintos

목록 보기
6/6

한 일


인라인 어셈블리(AT&T방식) 익히기

CSAPP, Chapter 3 프로그램의 기계수준 표현에 관련한 내용이 잘 나와있다. 책으로 공부하면 제대로 이해했는지 확인 할 방법이 없으니, 강의를 통해 확인했다.

인라인 어셈블리 관련 내용들은 구글링해도 제대로 나오지 않았다. 아예 초심자가 보기에는 알 수 없는 내용...

CMU의 CSAPP 강의자료 영상
https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22b96d90ae-9871-4fae-91e2-b1627b43e25e%22&sortColumn=1&sortAscending=true&maxResults=250

강의에는 없지만 Pintos에서 다루는 인라인 어셈블리 문법 자료들
output, input, clobber 순서 https://wiki.kldp.org/KoreanDoc/html/EmbeddedKernel-KLDP/app3.basic.html
역참조, 연산 및 관련 예제코드
http://jake.dothome.co.kr/inline-assembly/
http://egloos.zum.com/chammoru/v/4965948
iretq 관련 내용
https://www.felixcloutier.com/x86/iret:iretd


스레드 작동순서 익히기

Piintos Internals - 커널 스레드 동작 전체적 과정
출처: [차얀의 프로그래밍 노트]
https://chayan-memorias.tistory.com/87

  1. thread_init : init_thread(initial_thread, "main", PRI_DEFAULT); 를 호출하여 'main' 이라는 이름의 초기 스레드를 만들어준다.

  2. 이후 thread_start(void)함수를 통해 idle_thread가 만들어진다
    thread_create("idle", PRI_MIN, idle, &idle_started);

  3. 받은 인자를 바탕으로 스레드가 만들어진다

아울러 모든 스레드들 정보는 커널영역에 저장된다



회고

multi-oom 테스트케이스가 메모리 누수를 신경써야하는 테스트 케이스이다. palloc_free_page를 잘 해주어야 했다.

근데 난 palloc이 뭔지 제대로 이해하지 못했고, 메모리 누수가 실제로 어디서 어떻게 생기는 건지 몰랐다. 그리하야 Virtual Memory를 공부하게 되었다.

또한 exec 시스템콜의 경우 process_clean()을 해주는 부분이 있다. 이 때에도 역시 process_clean 함수가 메모리의 어느 부분을 청소해주는지 알지 못했었다. 각종 데이터들의 메모리의 커널영역에 저장되는지 유저영역에 저장되는지 알아야 제대로 이해할 수 있었다.

CSAPP의 8장과 9장 내용을 통해 공부했다.


일단 어렵다. 그리고 제대로 이해하지 못하고 넘어가는 경우가 많다. 구현이 우선인지 개념이해가 우선인지 모르겠다. 개념이해가 안되어있음에도 불구하고 test case가 통과하게 되면 그 찝찝함은 말로 못한다.

pintos pj2 - system call을 하면서 몇 가지 종류의 역량이 필요함을 느꼈다.

  1. 구현을 하는 능력
    주어진 내용을 바탕으로 실제 구현하는 능력
    내가 부족하다
  2. 개념 이해력
    나는 개념이 제대로 안 잡히면 좀체 구현하기가 싫고, 어디를 어떻게 손대야 할지 모르겠다.

개념이해와 구현은 상호 보완적인 관계이지만 엔지니어로서 개념이해보다는 구현이 조금은 더 중요한 듯 하다.

여하튼, OS 관련하여 개념공부는 많이 했지만,
① 구현이 좀 늦어졌고
② 직접 생각해서 구현했던 것이 아니라 구글링해서 나온 참고자료들을 바탕으로 구현했던
여러모로 아쉬움이 많이 남는 프로젝트...

0개의 댓글