Pintos (4) 썸네일형 리스트형 Pintos Project 4: File Systems 우리가 기존에 했던 방식은 비트맵을 사용하여 구현 하였다. 따라서 기존에 구현된 파일시스템 관련 하수들을 다 FAT 방식으로 바꿔야 한다. FAT은 연결리스트 형태로 구현하면 된다 .그전에 어디서부터 시작되나 보자. 시작은 일단 init.c에서 disk_init()과 filesys_init()에서 시작된다. filesys_init 들어가 보면 파일 시스템 모듈을 initialize 하는 곳이라고 나와있다. 이 함수에서 다시 차례로 fat_init 해주고 인자로 받은 format 확인해서 재포맷하기위해 do_format도 해준다 do_format함수에서 파일 시스템을 포맷해주는 함수이다. fat_init 함수를 보면 부트 섹터에서 읽어와서 fat_fs구조체의 부트섹터에 할당해준다. 그리고 do_format.. Pintos Project3: Virtual Memory 지금까지 만든 pintos project는 몇가지 한계가 있었다. 먼저 swap을 진행 할 수 없고 demand paging이 사용 불가 했고 가상 메모리가 구현 되지 않았다. 이번 프로젝트에는 이런 점들을 보완할 것이다. 그 전에 먼저 Supplemental page table을 정리하고 넘어가야 한다. 우리가 기존에 아는 페이지 테이블에 좀 더 보충해주는 역할을 하는 테이블이다. 각 페이지에 대한 추가 데이터로 페이지를 보완한다. 여기서는 페이지 테이블과 같게 봐도 될 것 같다. 페이지 폴트가 났을때 추가 되어야 할 데이터를 알 수 있고, 프로세스가 종료 되었을때 해제 되어야할 자원을 알 수 있게 해준다. 우리 프로젝트에서는 hash 를 사용해서 페이지들을 관리 한다. supplemental_page.. Pintos Project2: User Programs 아 일단 시간이 너무 없어서 프로젝트가 다 끝난 뒤 정리용으로 써야 될 거 같다. 먼저 저번 프로젝트에서 부팅이 된 후 커널 스레드를 생성시켜 프로세스를 돌게 만들고 우선순위 별로 스케줄링하는 단계까지 구현을 했다. 이번 프로젝트에서는 사용자 명령어를 받아서 시스템 콜들을 실행하는 단계를 구현해야 한다. 그래서 일단은 argument passing을 먼저 처리해야 한다. 우리가 쉘에서 명령어를 입력하면 그 명령어대로 처리할 수 있게 입력된 명령어들을 잘 파싱 하여서 스택에 올리고 실행할 수 있게 넘겨주는 것이다. 이 동작은 밑에 코드를 보면 알 수 있다. 이전 단계에서는 무시되었던 코드다. 우리가 입력한 명령어가 저 task 인자로 들어간다. 이곳으로 들어오면 우리가 입력한 명령어에서 실행해야 될 커맨드.. Pintos project 1 Alarm clock, priority scheduling project 1 Threads는 크게 2가지를 개선하는 방식으로 진행되는데 우선 alarm clock을 먼저 이야기하겠다 기존의 Alarm clock(sleep)은 스레드가 일어날 때까지 busy waiting으로 대기하면서 언제 깨울지를 기다린다. 밑의 코드처럼 시간이 될 때까지 계속 깨워서 확인하게 된다. 우리는 이걸 주어진 시간만큼 스레드를 재웠다가 다시 깨울 것이다. 그러기 위해서는 몇 가지 상태에 대해 알아야 되는데 위에서 말한 것처럼 스레드가 돌고 있는 상태를 running, 우리가 스레드를 잠재우면 blocked 된다고 말한다. 이걸 다시 깨워서 ready 큐에 넣는데 이걸 대기 상태라 볼 수 있다. 따라서 우리는 block 시켜서 잠재울 애들을 따로 관리하는 sleep list를 추가해 .. 이전 1 다음