Pintos
-
[Pintos] Project1_Alarm Clock 해설Pintos 2023. 6. 27. 16:08
Alarm Clock Reimplement timer_sleep(), defined in devices/timer.c. devices/timer.c에 정의된 timer_sleep()을 다시 구현합니다. 작동하는 구현이 제공되지만, 현재 시간을 확인하고 충분한 시간이 경과할 때까지 thread_yield()를 호출하는 루프를 돌리는 등 바쁘게 대기합니다. 바쁜 대기를 피하려면 다시 구현하세요. void timer_sleep (int64_t ticks); 시간이 x timer ticks 이상 진행될 때까지 호출 스레드의 실행을 일시 중단합니다. 시스템이 idle 상태가 아닌 한 스레드는 정확히 x tick 후에 깨어날 필요가 없습니다. 적절한 시간 동안 기다린 후 준비 대기열에 넣으면 됩니다. timer_s..
-
[Jungle] Pintos_Project3_Virtual Memory: Error 해결Pintos 2023. 6. 20. 13:32
새벽에 make 에러를 해결하던 중 다른 에러는 다 해결했는데 이 하나를 잡지 못하고 잠들었다. ** 다른 에러들은 헤더 파일을 include 해주지 않아서 발생한 에러가 많았다. 원인 /* The representation of "frame" */ struct frame { void *kva; struct page *page; struct list_elem frame_elem;// project3 추가 - frame table을 위한 list_elem }; struct frame 안에 frame table을 위한 list_elem을 만들어줄 때 위 코드처럼 list_elem frame_elem;으로 써서 에러 발생 해결 /* The representation of "frame" */ struct fra..
-
[Jungle] Pintos_Project3_Virtual Memory: 보충 페이지 테이블(supplemental page table) 구현Pintos 2023. 6. 19. 04:57
1. void supplemental_page_table_init (struct supplemental_page_table *spt UNUSED) void supplemental_page_table_init (struct supplemental_page_table *spt UNUSED) { hash_init(&spt->pages, page_hash, page_less, NULL); } : 포인터를 사용하여 supplemental page table을 초기화 하는 함수. 필요한 데이터 구조를 생성하고 초기화한다. 이는 연결리스트나 해시 테이블 등을 할당하고 초기 값으로 설정하는 과정을 포함한다. 'hash_init' 함수를 사용하여 보조 페이지 테이블의 'pages' 필드를 초기화한다. 'pages' 필드..
-
[Jungle] Week10 Pintos_Project3_Virtual Memory: 페이징(Paging) / 페이지(Page) / 프레임(Frame) / 페이지 테이블(Page Table) / 해시 테이블(Hash Table)Pintos 2023. 6. 17. 03:07
페이징(Paging) 페이징은 가상 메모리 관리 기법 중 하나로, 프로세스의 주소 공간을 고정 크기의 블록인 페이지(Pages)로 분할하여 관리하는 방법이다. 각 페이지는 일정한 크기를 가지며, 물리 메모리의 프레임(Frame)에 매핑된다. 페이지 (Page) : 페이지는 가상 주소 공간을 일정한 크기로 나눈 조각이다. Pintos에서 페이지의 크기는 일반적으로 4KB이다. 프로세스의 가상 주소 공간은 여러 개의 페이지로 구성되며, 각 페이지는 물리적인 메모리에 저장될 수도 있고 디스크에 스왑될 수도 있다. 페이지는 프로세스의 논리적 주소와 물리적 메모리 주소 간의 매핑을 관리하는 데 사용된다. 프레임 (Frame) : 프레임은 물리적인 메모리(RAM)에서 페이지가 저장되는 공간이다. 프레임은 페이지 테..
-
[Jungle] Week10 Pintos_Project3_Virtual Memory: gitbook 해설Pintos 2023. 6. 13. 13:30
Introduction Project3: Virtual Memory 이제 핀토스의 내부 작동 방식에 어느 정도 익숙해졌을 것입니다. OS는 적절한 동기화를 통해 여러 스레드의 실행을 적절히 처리할 수 있으며, 여러 사용자 프로그램을 한 번에 로드할 수 있습니다. 그러나 실행할 수 있는 프로그램의 수와 크기는 컴퓨터의 주 메모리 크기에 의해 제한됩니다. 이 과제에서는 무한한 메모리라는 환상을 구축하여 이러한 제한을 제거합니다. 지난 과제 위에 이 과제를 구축하게 됩니다. 프로젝트 2의 테스트 프로그램은 프로젝트 3에서도 작동해야 합니다. 프로젝트 2 제출물의 버그는 프로젝트 3에서도 동일한 문제를 일으킬 가능성이 높으므로, 프로젝트 3 작업을 시작하기 전에 프로젝트 2 제출물의 버그를 수정해야 합니다. 프..
-
[Jungle] Week10 Pintos_Project2 WILPintos 2023. 6. 12. 03:30
Argument Passing argument passing에서 가장 중요한 부분은 사용자로부터 입력 받은 문자열을 적절하게 구분해서 특정 변수에 담아 필요한 함수에 인자들을 보내주는 것이다. 그것을 구현한 코드가 이 부분이며, parse 문자열 배열에 명령어들을 저장하여 꺼내 쓸 수 있다. command line으로 입력이 들어올 때 1차로 main함수에서 parsing한 후 전달하고, 우리의 목표는 run 뒤에 ' ' 안에 있는 문자를 parsing하는 것이다. System Call System call Pintos에서 시스템 호출(System Call)은 사용자 프로그램이 커널 기능을 호출하는 인터페이스다. 사용자 프로그램은 시스템 호출을 사용하여 커널에게 특정 서비스를 요청하고, 커널은 해당 서비..
-
[Jungle] Pintos_Project2_User Programs: gitbook 해설Pintos 2023. 6. 4. 01:20
Argument Passing 인수 전달 process_exec()에서 사용자 프로그램에 대한 인수를 설정합니다. x86-64 호출 규칙 이 섹션에서는 64비트 x86-64 구현의 유닉스에서 일반 함수 호출에 사용되는 규칙의 중요한 사항을 요약합니다. 간결성을 위해 일부 세부 사항은 생략했습니다. 자세한 내용은 System V AMD64 ABI를 참조하십시오. 호출 규칙은 다음과 같이 작동합니다: 사용자 수준 응용 프로그램은 %rdi, %rsi, %rdx, %rcx, %r8 및 %r9 시퀀스를 전달하기 위해 정수 레지스터로 사용합니다. 호출자는 스택에서 다음 명령어의 주소(반환 주소)를 푸시하고 호출자의 첫 번째 명령어로 점프합니다. 단일 x86-64 명령어인 CALL은 이 두 가지를 모두 수행합니다. ..
-
[Jungle] Week08 Pintos_Project1_Threads: 스케줄링 - Round Robin 라운드 로빈 / Priority Inversion 우선순위 역전Pintos 2023. 5. 26. 20:35
Scheduler 1. Round Robin(RR) 라운드 로빈 : FCFS에서 짧은 프로세스가 피해보는 현상을 완화하는 가장 간단한 방법은 시간을 측정하고 있다가 어떤 긴 프로세스가 일정 시간 이상을 넘어가는 순간 실행을 강제로 선점시키는(preemption) 것이다. 프로세스 실행 시간을 재기 위해 필수적인 것이 클록(clock) 인터럽트(또는 타이머 인터럽트)인데, 클록 인터럽트는 일정 간격으로 주기적으로 발생한다. 클록 인터럽트가 발생하면 클록 인터럽트 서비스 루틴이 실행되며 클록 인터럽트 서비스 루틴은 현재 실행 중이던 프로세스는 준비 큐로 이동시키고 준비 큐에서 FCFS 방식으로 다음번 프로세스를 골라 실행시킨다. -> 이러한 기법을 시간 할당량(time slicing, 또는 time quan..