728x90 pintos5 [pintos] Project 3_Virtual Memory(가상 메모리)_2 [pintos] Project 3_Virtual Memory(가상 메모리)_2 Memory mapped files mmap and munmap System Call void *mmap (void *addr, size_t length, int writable, int fd, off_t offset); // systcall.c void syscall_handler (struct intr_frame *f UNUSED) { // TODO: Your implementation goes here. switch (f->R.rax) ... case SYS_MMAP: f->R.rax = (uint64_t) mmap ((void*) f->R.rdi, (size_t) f->R.rsi, (int) f->R.rdx, (int).. 2021. 10. 27. [Pintos] Project 2_User Program_system call [Pintos] Project 2_User Program_system call System call details OS에 의해 제공되는 Programming interface이다 user mode program이 kernel feature를 사용하게 해준다. system calls은 kernel mode에서 run하고 user mode로 돌아온다 system call의 핵심은 system call을 부르기 위해 hardware(external) interrupt 가 발생하기 때문에 execution mode의 priority가 special mode로 격상한다는 점이다. 이전 x86 architecture에서는 system call이 software exception으로 처리되었다. 하지만 x86-64에.. 2021. 10. 14. [pintos] Project 1_alarm [pintos] Project 1_alarm pintos는 기본 기능들만 구현된 작은 운영체제이다. 마치 tiny web server처럼 이 운영체제에는 실행중인 스레드를 잠시 재우고 다른 스레드에서 진행하는 하는 기능이 있는데, 처음에는 busy waiting 방식으로 구현되어 있다. 이를 Sleep / Awake로 구현하는 것이 첫 번째 과제이다. Busy waiting 구현 busy waiting은 매 시간 자고 있는 스레드를 깨워 시간을 확인한 후 아직 깨울 시간이 안됐으면 다시 재운다. 이를 계속 반복하다 꺠어날 시간이 되었을 때 깨우는 방식이다. 이는 매우 비효율적인 방식으로 많은 CPU 시간을 낭비한다. busy waiting은 아래와 같이 구현되어 있다. thread_yield 함수로 sc.. 2021. 10. 4. [PintOS] 로딩 (Loading) [PintOS] 로딩 (Loading) 1. Loader 로딩(Loading) : pintos 첫 실행시 진행되는 부팅의 과정이다. 부팅(Booting) : 컴퓨터를 구동하여 기초적인 초기화 작업을 수행하고 운영 체제를 읽어오는 일련의 작업이다. 로더(Loader) : 부팅 작업을 진행하는 프로그램. Disk의 첫 번째 섹터에 저장되어 있다. 1) BIOS(ROM에 있음)가 로더(Loader)를 메모리에 로드(Load) 한다. BIOS는 컴퓨터가 구동된 후 저장 장치(Disk)의 첫 번째 섹터를 탐색해여 이 장치가 부팅 가능한지 검사한다. (BIOS : Basic Input/Output System 입출력 처리 펌웨어) Sector : 저장 장치(Disk)에서 데이터를 저장하는 최소 단위로, 한 섹터의 .. 2021. 10. 4. [PintOS] 디버깅 도구(Debugging Tool)_printf, ASSERT, __attributes__, backtraces [PintOS] 디버깅 도구(Debugging Tool)_printf, ASSERT, __attributes__, backtraces Printf 코드 사이사이에 printf 함수를 넣어 출력을 통해 디버깅 할 수 있다. 간단하지만 효과적인 방법 ! ASSERT 표준 c library 중 하나인 assert.h 에 있는 매크로이다. pintos 에서는 에 구현되어 있다. /* NDEBUG는 디버그 모드가 아닌경우(릴리즈 모드)를 말한다.(Not DEBUG) * #ifndef는 매크로가 정의되지 않은 경우에만 코드를 컴파일 함. * ASSERT 매크로는 조건이 맞지 않을 때 프로그램 중단 */ #ifndef NDEBUG #define ASSERT(CONDITION) \ if ((CONDITION)) { }.. 2021. 10. 3. 이전 1 다음 728x90