본문 바로가기

정글/pintos7

[Project3] Virtual Memory(4) - Stack Growth 프로젝트 2에서 스택은 USER_STACK에서 시작하는 한 페이지로 제한되어있으며, 해당 사이즈 내에서만 프로그램이 실행될 수 있었다. 이번 과제에서는 스택이 현재 크기 이상으로 커지면, 필요에 따라 페이지를 추가 할당한다.(= 동적 할당) 이때 추가 페이지 할당은 스택 접근으로 보이는 경우에만 할당한다. 스택 접근과 다른 접근을 구분하는 방법을 고민해야 한다. 사용자 프로그램이 스택 포인터 아래에서 쓰기 작업을 수행하면 버그가 발생한다. 일반적인 OS는 “Signal”(여기서는 쓰기가 신호가 된다!)을 전달하기 위해 언제든지 프로세스를 중단할 수 있다. 이 중단으로 인해 스택 데이터는 수정될 수 있다. X86-64 아키텍처의 PUSH 명령은 스택 포인터를 조정하기 전에 접근 권한을 확인한다. 만약 스택.. 2023. 6. 21.
[Project3] Virtual Memory(3) - Anonymous Page 이번 프로젝트에서는 anonymous page라고 하는 non-disk based image를 구현할 것이다. non-disk based image란 디스크(하드 디스크, 다른 저장 매체)가 아닌 다른 형태의 저장 매체나 메모리에 저장되는 이미지를 말한다. 예를 들어 메모리(RAM)나 캐시와 같은 임시 저장 공간이나 네트워크를 통해 전송되어 메모리에 로드된 이미지를 말하는데, 이 방식은 일시적이거나 동적인 이미지 저장에 유용하고 디스크 기반 이미지 저장 방식에 비해 속도와 접근성이 좋다. Anonymous mapping은 백업 파일, 장치(메모리 매핑이 지원되는 물리적인 장치나 파일)가 없다. Anonymous라는 뜻은 파일 백업 페이지와 다르게 이름이 지정된 backing 파일이나 장치가 없다는 것을 .. 2023. 6. 17.
[Project3] Virtual Memory(2) - Memory Management Memory Management 가상 메모리 시스템을 사용하려면, virtual page와 physical frame을 잘 다뤄야 한다. 즉, virtual 또는 physical 메모리 영역이 누구에게, 왜, 사용되고 있는지 확인해야 한다. 이번 과제에서는 SPT(Supplemental page table)를 학습하고, 실제 프레임을 다룰 것이다. 또한 virtual page에는 page라고 하고, physical page는 frame이라고 용어를 사용한다. Page Structure ans Operations struct page include/vm/vm.h 에 작성된 page 는 virtual memory를 나타내는 페이지 구조체이다. struct page { const struct page_oper.. 2023. 6. 14.
[Project2] User Program(3) - Argument Passing https://github.com/Blue-club/pintos_5/issues/16 [Project 2-1] Passing the argument and creating a thread(mywnajsldkf) · Issue #16 · Blue-club/pintos_5 github.com 1. Argument Passing process_exec() 함수는 User program에서 입력한 명령을 수행할 수 있는 프로그램(=process)을 메모리에 적재하고 실행한다. 현재 문자열은 명령어에 대한 인자 passing이 제공되지 않은 상태이므로, 이를 구현해야 한다. 즉, 문장을 공백 기준으로 나누어 단어를 파싱하는 것이다. 예를 들어 bin/ls -l foo bar 라는 문장이 들어왔다면 첫번째 단어(b.. 2023. 6. 14.
[Project3] Virtual Memory(1) - Introduction OS는 적절한 동기화를 통해 여러 스레드를 적절히 처리할 수 있고, 사용자 프로그램을 한번에 로드할 수있다. 하지만 실행할 수 있는 프로그램 수와 크기는 컴퓨터의 기본 메모리 크기에 따라 달라진다. 이 과제는 가상 메모리(Virtual Memory)를 구축하여, 크기 제한을 제거한다. 과제 시작 전에 project2가 완벽하게 마무리되어야 한다. Background Source Files vm 폴더 참고!!! include/vm/vm.h, vm/vm.c virtual memory 기본 인터페이스를 제공한다. 헤더 파일에서는 가상 메모리 시스템이 지원하는 다양한 vm_ 유형(VM_UNIT, VM_ANON, VM_FILE, VM_PAGE_CACHE)를 확인할 수 있다. (VM_PAGE_CACHE는 proje.. 2023. 6. 14.
[Project2] User Program(2) - Passing the argument and creating a thread: process_exec 함수의 뿌리를 찾아서... process_exec (void *f_name)는 현재 실행 컨텍스트를 f_name으로 바꾸는 함수이다. 이 과제에서 우리는 process_exec에서 호출하는 file을 로드하는 load() 함수에서 f_name을 통해 들어온 명령어를 잘 파싱하여 파일 명과 인자를 구분하는 작업을 해야한다. Argument Parsing을 구현하기 위해 process_exec가 어디에서 나왔는지 거슬러 쭉 올라가면 main함수이다. 한번 위부터 내려와보겠다. 🔎 코드 흐름 int main(void) (threads/init.c) /* Pintos main program. */ int main (void) { uint64_t mem_end; char **argv; /* Clear BSS and get machine's.. 2023. 6. 5.
[Project2] User Program(1) -Background Part2: User Programs 목표: 사용자 프로그램과 커널 프로그램을 시스템 콜을 통해서 소통하여 돌아가도록 한다. 주의할 점 userprog에서 작업을 시작해라. project1을 모두 끝내고 시작해라. #ifdef VM 안에 코드가 추가되면 안된다. → Project3의Virtual Memory Subsystem을 활성화하고 시작된다. Topic Parameter Passing System Call infrastructure File manipulation Background Project1에서 진행한 과정은 실행한 코드가 운영 체제 커널의 일부이다. 지난 과제에서 테스트 코드는 커널의 일부로 동작한 것으로, system의 권한 부분까지 접근할 수 있다. 만약 User Program을 OS에.. 2023. 6. 4.