본문 바로가기

KAIST PintOS5

[CS] Kaist PintOS User Programs, System Call #5 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다 Pintos Project2 systemcal User program에서 write를 호출하면 syscall.c에 있는 write함수를 호출한다. write함수는 syscall3 함수를 호출한다. syscall3함수는 3개의 인자를 받아 User Stack에 쌓고 Interrupt Vector Table의 syscall_handler를 호출한다. 프로젝트에서 구현할 부분은 syscall_handler의 내용이다. 여기 채워져야할 systemcall의 'number'는 syscall_nr.h에 정의되어있다. System call handler 구현 목표 1. system call handler가 system call number를 사.. 2022. 12. 27.
[CS] Kaist PintOS User Programs, Passing the arguments #4 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다. 이 문서는 카이스트 핀토스 프로젝트 가이드라인을 정리한 글입니다. Part 2 : User Program 현재 핀토스는 명령어 전체 한 줄을 통째로 읽는다. 'echo x y z' thread name : 'echo x y z' find program with file name : 'echo x y z' arguments : 'echo', 'x', 'y', and 'z' are not passed 각각의 인자가 구분되도록 수정해야한다. thread name : 'echo' find program with file name : 'echo' pushl the arguments(x, y, z) to user stack. 수정해야 하는 .. 2022. 12. 23.
[CS] Kaist PintOS User Programs, 프로그램 구조 설명 #3 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다. 이 문서는 카이스트 핀토스 프로젝트 가이드라인을 정리한 글입니다. Part 2 : User Program 1. 핀토스(다른 운영체제가 그러하듯)는 프로세스 실행을 위해 인수를 얻고 함수를 호출한다. run_task(char ** argv) 함수는 process_excute(argv)를 호출한다 2. 프로세스가 실행되면 어떠한 기능을 가진 스레드를 생성한다. process_excute(const char *file_name) 함수는 thread_create(.. start_process...)를 호출한다. 3. 여기서 주목할 점은 처음 호출되는 run_task(char **argv)에서 프로세스 실행 함수를 인자로 받는 proces.. 2022. 12. 23.
[CS] Kaist PintOS THREAD, Priority Scheduling #2 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다. 이 문서는 카이스트 핀토스 프로젝트 가이드라인을 정리한 글입니다. Part 1 : Threads 다음 세 가지를 구현한다. 1. Alarm clock 2. Priority scheduling 3. Advanced scheduler #2 Priority scheduling 이번 과제에서는 다음 3가지는 구현해야 한다. 1. 스레드 우선순위에 다른 ready_list 정렬 2. 동기화 요소에 따른 wait_list 정렬(semaphore, condition variable) 3. preemption 구현 PintOS의 우선순위 수준은 0(PRI_MIN)에서 63(PRI_MAX)으로 64 계층으로 이루어져 있다. 숫자가 높을수록 우선순.. 2022. 12. 19.
[CS] Kaist PintOS THREAD, Alarm clock #1 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다. 이 문서는 카이스트 핀토스 프로젝트 가이드라인을 정리한 글입니다. Part 1 : Threads 다음 세 가지를 구현한다. 1. Alarm clock 2. Priority scheduling 3. Advanced scheduler #1 Alarm clock timer_sleep void timer_sleep (int64_t ticks) { int64_t start = timer_ticks (); while (timer_elapsed (start) < ticks) thread_yield (); } start변수에 현재 시간을 저장한다. timer_elapsed(time) : 들어온 인자로부터 얼마의 시간이 지났는지 반환한다. 이후 .. 2022. 12. 17.