. 'Pintos Project' 카테고리의 글 목록 (2 Page)
본문 바로가기

Pintos Project38

[PintOS, Project 3] Anonymous Page spt spt copy - src에서 dst로 spt 복사 - fork()할 때 사용한다. - Iteration 사용 - uninit page를 만들고 즉시 claim까지 해야한다. -> 기존의 (lazy안하고 남아있던) uninit을 복사하는 것인가? 아니면 새 프로세스가 가져야할 전체 page를 하는 것인가? spt kill - spt가 들고있는 모든 자원을 free한다. - process_exit()할 때, 이 함수가 호출된다. - pag entry를 itration으로 destroy한다. - pml4랑 물리 메모리는 고려안해도 된다. Page Cleanup uninit_destory랑 anon_destroy를 시행한다. uninit 페이지가 다른 page obj로 변했더라도, type은 unini.. 2021. 2. 23.
[PintOS, Project 3] Stack Growth Stack Growth - 스택에 접근하려고 할 때, 추가 페이지를 할당한다. - 스택포인터를 조정하기 전에 접근 허가를 체크할 것이고, 이는 현 스택 포인터 8byte 아래에 페이지 폴트를 야기할 것이다. - 현 유저 프로그램의 스택 포인터의 현재 값을 획득해야한다. - 유저 프로그램이 페이지 폴트를 발생시키거나, 시스템콜을 호출할 때, if에서 rsp를 획득해서 시스콜이나 페이지폴트에 전달할 수 있다. - 페이지 폴트시에 invalid memory access 를 탐지하고 싶다면, page fault가 kernel에서 일어나고 있는지도 체크해야한다. - 프로세서는 exception이 user mode에서 kernenl mode로 바꿀 때만 스택 포인터를 저장하고 있기 때문에, if밖에서 rsp를 읽어.. 2021. 2. 23.
[PintOS, Project 3] Hash Table Data Types Hash Table은 struct hash로 나타내어진다. struct hash; hash table을 의미한다. struct hash에는 직접 접근할 수 없기 때문에 필요시에는 hash table function과 macro를 사용한다. hash table은 struct hash_elem을 리스트의 인자로 가진다. struct hash_elem; hash table에 관련된 함수들은 hash elem을 인자로 가지거나 반환한다. hash table의 real elemnt가 주어졌을 때, hash elem을 가리키는 포인터를 획득하기 위해서는 & (비트연산자)를 사용해야한다. 다른 방향으로 가고 싶으면 hash_entry()를 사용하라. #define hash_entry (elem, .. 2021. 2. 19.
[PintOS, Project 3] Virtual Memory Management - Variable Allocation and Consideration Working Set (WS) Algorithm Working Set - Process가 특정 시점에 자주 참조하는 page들의 집합 - 최근 일정시간 동안(Δ) 참조된 page들의 집합 - 시간에 따라 변함 - W(t, Δ) ㆍThe working set of a process at time t ㆍTime interval [t-Δ, t] 동안 참조된 pages들의 집합 (t-Δ, t]는 포함되지 않음) ㆍΔ : window size, system parameter Working set memory management - Locality에 기반을 둠 - Working set을 메모리에 항상 유지 ㆍPage fault rate (thrashing) 감소 ㆍ시스템 성능 향상 - Window size (Δ) .. 2021. 2. 19.
[PintOS, Project 3] Virtual Memory Management - Replacement Strategies for Fixed Allocation Locality;지역성 프로세스가 프로그램/데이터의 특정 영역을 집중적으로 참조하는 현상 - 원인 : ㆍLoop structure in program (for문, while문) ㆍArray, structure 등의 데이터 구조 (한 구조체에서 값을 불러왔을 때, 짧은 시일 내에 그 구조체에서 다른 값을 호출할 가능성이 높다) - 공간적 지역성 (Spatial locality) ㆍ참조한 영역과 인접한 영역을 참조하는 특성 - 시간적 지역성 (Temporal locality) ㆍ한 번 참조한 영역을 곧 다시 참조하는 특성 Replacement Strategies - Fixed allocation : 한 프로세스에게 정해진 수의 page frame을 할당한다. ㆍMIN(OPT, B0) algorithm ㆍRa.. 2021. 2. 18.
[PintOS, Project 3] Virtual Memory Management - SW Components Software Components 가상 메모리 성능 향상을 위한 관리 기법들 - Allocation strategies (할당 기법) - Fetch strategies - Placement strategies (배치 기법) - Replacement strategies (교체 기법) - Cleaning strategies (정리 기법) - Load control strategies (부하 조절 기법) 1. Allocation Strategies 각 프로세스에게 메모리를 얼마 만큼 줄 것인가? - Fixed allocation (고정 할당) ㆍ프로세스의 실행 동안 고정된 크기의 메모리 할당 - Variable allocation (가변 할당) ㆍ프로세스의 실행 동안 할당하는 메모리의 크기가 유동적 고려사항.. 2021. 2. 18.
[PintOS, Project 3] Virtual Memory Management - Cost Model / HW Components Virtual Memory (기억장치) - Non-continuous allocation ㆍ사용자 프로그램을 block으로 분할하여 적재/실행 - Paging / Segmentation system 가상 메모리 관리의 목적 - 가상 메모리 시스템 성능 최적화 ㆍPage fault frequency (발생 빈도) ㆍPage fault rate (발생률) : Page fault rate를 최소화 할 수 있도록 전략들을 설계해야 함 -> Context switch 및 Kernel 개입을 최소화 -> 시스템 성능 향상 Cost Model - Page reference string (d) ㆍ프로세스의 수행 중, 참조한 페이지 번호 순서 ㆍω = r1r2 ... rk ... rT (프로세스가 실행되면서 참조한 페이.. 2021. 2. 18.
[PintOS, Project3] Virtual Memory - Segmentation System Segmentation System - 프로그램을 논리적 block으로 분할 (segment) ㆍBlock의 크기가 서로 다를 수 있음 - 특징 : ㆍ메모리를 미리 분할하지 않음. (VPM과 유사) ㆍSegment sharing / protection이 용이함 ㆍ메모리를 동적으로 분할하기 떄문에, Address mapping 및 메모리 관리의 overhead 가 큼 -> 대신 메모리를 효율적으로 활용할 수 있다. ㆍNo internal fragmentation -> External fragmentation 발생 가능 Address Mapping - Virtual address : v = (s, d) ㆍs : segment number ㆍd : displacement in a segment - Segmen.. 2021. 2. 18.
[PintOS, Project3] Virtual Memory - Paging System Non-continuous allocation - 사용자 프로그램을 여러 개의 block을 분할 - 실행 시, 필요한 block들만 메모리에 적재 -> 나머지 block들은 swap device에 적재 - 기법들 ㆍPaging System ㆍSegmentation System ㆍHybrid Paging / Segmentation System Continuous allocation - Relative address (상대주소) ㆍ프로그램의 시작 주소를 0으로 가정한 주소 - Relocation (재배치) ㆍ메모리 할당 후, 할당된 주소(allcation address)에 따라 상대 주소들을 조정하는 작업 Address Mapping Non-continuous allocation - Virtual addre.. 2021. 2. 18.
[PintOS, Project2] System Call 0. System Call이란? 시스템 콜은 사용자가 커널 영역에 접근하고 싶을 때, 원하는 목적을 대신해서 작업하는 프로그래밍 인터페이스이다. 그렇기 때문에 시스템 콜은 커널 모드에서 실행되고, 작업 후 사용자 모드로 복귀한다. PintOS에서는 이를 시스템 콜 핸들러를 통해 시스템 콜 (halt, exit, create, remove)를 호출한다. 시스템 콜을 호출할 때, 원하는 기능에 해당하는 시스템 콜 번호를 rax에 담는다. 그리고 시스템 콜 핸들러는 rax의 숫자로 시스템 콜을 호출하고, 해당 콜의 반환값을 다시 rax에 담아서 intr frame(인터럽트 프레임)에 저장한다. 1. Syscall Handler @/userprog/syscall.c /* The main system call i.. 2021. 2. 17.
[PintOS, Project2] 명령어 실행 기능 구현 1. Process_Exec() 수정 유저 프로그램이 실행하기 전에, 커널은 레지스터에 맨 처음 function의 argument를 저장해야한다. Process_Exec()은 유저가 입력한 명령어를 수행할 수 있도록, 프로그램을 메모리에 적재하고 실행하는 함수이다. 해당 프로그램은 f_name에 문자열로 이름이 저장되어있으나, 문제는 파일 이름 뿐만 아니라 옵션 (예를 들어서 rm -rf *을 명령어로 입력한다면, 실행 프로그램 파일은 rm이 되지만, 현재 f_name은 rm 뿐 아니라 -rf, * 도 함께 들어가있다.) 이 있기 때문에 이를 분리해줘야한다. 우선 원본은 아래와 같다. @/userprog/process.c /* Switch the current execution context to the.. 2021. 2. 17.
[PintOS, Project 2] User Programs Introduction - 만약 추과 과제의 테스트케이스를 도전하고 싶으면 userprog/Make.vars를 수정하라. - TODO가 없는 코드는 수정할 필요가 없다. We allow more than one process to run at a time. Each process has one thread (multithreaded processes are not supported). - 다중 프로세스로 구성되어 있다. User programs are written under the illusion that they have the entire machine. - UP는 전체 장치들이 있다는 가정하에 작성한다. From now on, we will test your operating system by running user p.. 2021. 2. 5.
[PintOS, Project1] Priority Inversion Problem Priority Inverstion Problem은 thread가 두 개 이상의 lock보유가능할 때, 높은 priority의 thread가 낮은 priority의 thread보다 늦게 실행될 수 있는 문제점을 말한다. 아래 예시를 보자. 그림 1의 상황은 이렇다. 현재 Priority 31의 thread가 running 중이다. (A)는 lock A의 소유권을 가지고 있다는 뜻이다. Read List와 Blocked List가 모두 비어있다. 이제 여기에 lock A를 원하는 높은 priority의 thread가 들어온다고 해보자. 그렇다면 priority가 높은 thread가 running thread가 될 것이다. 39은 running_thread가 되었으나 lock A를 보유하고 있지 않기 때문에.. 2021. 2. 4.
[PintOS, Project1] Priority_Scheduling and Synchronization (semaphore 관련) 지금까지 작업한 pintos에서 thread가 semaphore를 가져가는 순서는 FIFO순으로 되어있다. 이것은 priority가 높은 순으로 semaphore를 가져갈 수 있도록 할 것이다. @/include/threads/synch.h /* A counting semaphore. */ struct semaphore { unsigned value; /* Current value. */ struct list waiters; /* List of waiting threads. */ }; struct semaphore는 semaphore를 관리하기 위한 구조체로서 semaphore의 현재 상태인 value와 이 semaphore를 기다리는 waiters(list 구조체) 가 있다. semaphore와 관련된.. 2021. 2. 4.