PintOS Project3-1 WIL

Project3. Virtual Memory 개요 기간 : 2023년 5월 9일 ~ 23일 주제 : Virtual memory 과제 Memory Management Anonymous Page Stack Growth Memory Mapped Files Swap In/Out 배경지 Page 가상 페이지라고도 불리는 페이지는 길이가 4096 바이트(page size)인, 가상 메모리의 연속된 지역이다. 페이지는 page-aligned 여서, page size로 공평하게 나눌 수 있는 가상 주소에서 시작된다. 따라서, 64-비트 가상 주소의 마지막 12 비트는 page offset(혹은 그냥 offset)이다. 상위 비트들은 곧 들어올 페이지 테이블 내 index들을 가리키는데 사용된다. ...

2023년 5월 23일 · 13 분 · 배준수

PintOS Memory Management WIL

WIL(23/05/16) Memory Management struct page : union union : C에서 다른 type의 data를 같은 메모리 위치에 저장하는 data type임. 여러가지중 한번에 하나의 value만 가질 수있음. 여기서는 struct uninit_page uninit struct anon_page anon struct file_page file 세가지가 있음. 즉 page는 3개 중 하나의 형태를 가지는데 처음에는 uninit이였다가 anon,file 둘중 하나로 갈라진다. enum vm_type VM_UNINIT(0, 초기화안됌), VM_ANON(1, 파일 없이 anonymous page), VM_FILE(2,파일 있음), VM_PAGE_CACHE(프4 내용) 맨 처음엔 UNINIT 상태로 시작. 그 후 ANON이나 FILE로 갈라지는듯. ...

2023년 5월 16일 · 1 분 · 배준수

PintOS Project3-3

Stack growth 질문 User programs are buggy if they write to the stack below the stack pointer, because typical real OSes may interrupt a process at any time to deliver a “signal,” which modifies data on the stack. However, the x86-64 PUSH instruction checks access permissions before it adjusts the stack pointer, so it may cause a page fault 8 bytes below the stack pointer. 유저 프로그램은 스택에 wtire 할 때 스택 포인터보다 아래에 하면 버그가 발생한다. 일반적으로 실제 OS들은 스택의 데이터를 수정하는 “신호"를 전달하기 위해 언제든지 process에 interrupt하기 때문이다. 하지만 x86-64 PUSH 인스트럭션은 스택 포인터에 적용하기 전에 접근 허가를 확인해서, 스택포인터보다 8바이트 아래에 page fault를 발생시킨다. ...

2023년 5월 16일 · 3 분 · 배준수

PintOS Project3-4 Memory Mapped Files

Memory Mapped Files 개념 이전 anonymous page때와는 달리 memory-mapped page를 다뤄야 한다. anonymous page와 달리, file-backed mapping되어 있다. 페이지의 컨텐츠는 실존하는 파일들 그대로이다. page fault가 발생하면, physical frame이 즉시 할당되고 파일에서 메모리(프레임)로 컨텐츠들이 복사된다. memory-mapped page들이 매핑되지 않거나 swap-out 되면, 컨텐츠의 변동이 파일에도 반영된다. 함수 mmap과 munmap함수를 다루게 된다. memory- mapped file을 위한 시스템 콜이다. VM system은 mmap 구역으로 페이지를 최대한 lazily하게 load해야하고 mmaped file 그 자체를 백업 저장소로 사용해야 한다. 자세히 말하자면, 데이터가 메모리 지역에 데이터를 작성하고 운영체제가 그 메모리를 어떤 이유로 ‘free’해야 한다면, 그 데이터를 파일에 다시 옮겨 작성할 수 있다. 그러면 free 한 이후라도 다시 필요해지면 disk의 file에서 그 데이터를 가져올 수 있다. ...

2023년 5월 16일 · 4 분 · 배준수

PintOS Project3-5 Swap In/Out

Swap In/Out 개념 메모리 스와핑은 물리 메모리 사용을 극대화시키기 위한 기법이다. 메인 메모리의 프레임이 할당되면, 시스템은 더 이상 유저프로그램이 요청한 메모리 할당 요청을 처리할 수 없다. 해결책 중 하나는 현재 사용되고 있지 않은 메모리 프레임을 디스크로 ‘swap out’하는 것이다. 이로서 메모리 자원을 free할 수 있고 이는 다른 application이 활용할 수 있다. 스와핑은 운영체제가 한다. 시스템이 메모리가 부족한데 메모리 할당 요청을 받으면, 디스크를 swap하기 위해 evict할 페이지를 선택한다. 그 후, 메모리 프레임의 정확한 state는 디스크에 복사된다. 프로세스가 swap out된 페이지에 접근하려고 하면, 운영체제는 메모리로 다시 정확한 컨텐츠를 되가져와서 페이지를 복구한다. ...

2023년 5월 16일 · 2 분 · 배준수

PintOS 3주차 키워드 정리

Virtual Memory Management Paging Virtual Page page, memory page, virtual page는 인접하고 고정된 길이를 가지는 가상 메모리 블록이며 page table에 등록되어 있다. 가상 메모리 운영 체제에서 메모리 관리를 위한 가장 작은 단위의 데이터이다. 이와 유사하게, page frame는 운영체제가 메모리 페이지를 매핑하는, 인접하고 고정된 길이를 가지면서 가장 작은 단위의 physical 메모리 블록이다. 하드 디스크 드라이브와 같은, 메인 메모리와 auxiliary store(보조 저장?) 사이의 페이지 전송이 페이징, swapping 이라고 불린다. 컴퓨터 메모리는 페이지들로 나누어져 있어 조금 더 빠르게 정보를 찾을 수 있다.기 본 발상은 인쇄된 책의 페이지를 본따 이름 붙어졌다. 예를 들어, 독자가 책의 5천번째 단어를 찾고 싶어 한다면, 첫 단어부터 셀 수도 있다. 시간 낭비긴 하지만.. 독자가 각 페이지에 있는 단어의 수의 리스트를 갖고 있다면 훨씬 빨리 할 수 있다. 이 리스트로 어느 페이지에 5천번째 단어가 있는지, 그 페이지에서 몇번째인지 알 수 있다. 책의 각 페이지에 대한 단어 리스트는 컴퓨터 파일 시스템의 page table에 영감을 주었다. ...

2023년 5월 10일 · 8 분 · 배준수

PintOS Project2-1 WIL

Pintos week02 User Programs 개요 기간 : 2023년 4월 27일~ 5월 9일 주제 : System call 과제 Argument Passing User Memory System calls Process Termination Messages Denying Writes to Excutables 배경지식 1. INTERRUPT 기본 개념 CPU의 명령 수행속도에 비해 I.O(입출력) 연산의 속도는 훨씬 느리다. I.O 연산을 위해 CPU가 쉬면서 기다리는 것은 낭비다. I.O 연산 중에 CPU는 다른 일을 하고 있는다. I.O 연산 결과가 나오면 CPU에게 알린다. =>" interrupt" 정의 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요한 경우에 마이크로프로세서에서 알려 처리할 수 있도록 하는 것. 하드웨어 interrupt와 소프트웨어 interrupt로 나뉜다. 하드웨어 인터럽트 하드웨어가 발생시킴 CPU가 아닌 하드웨어 장치가 CPU에게 알려주가나, 서비스 요청할 경우 발생 소프트웨어 인터럽트 소프트웨어가 발생시킴 사용자 프로그램(소프트웨어)가 스스로 인터럽트 라인을 세팅 종류 : exception(예외), system call(syscall) 두 종류 모두 CPU내의 인터럽트 라인을 세팅하여 인터럽트 발생시킴 CPU : 매 명령 수행 전 인터럽트 라인 검사 인터럽트 과정 상황 : 프로세스 A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받음 ...

2023년 5월 8일 · 18 분 · 배준수

PintOS Project2-4 WIL

Pintos week02 User Programs 과제 4 : Process Termination Messages 목표 ’exit’ 함수 호출이나 다른 이유로 프로세스가 종료될 때 마다 프로세스의 이름과 exit 코드 출력 과정 exit 함수 수정 수정 파일 : userprog/syscall.c 개선 방향 출력하는 코드 추가 정답 코드 1 2 3 4 5 6 void exit(int status){ struct thread *curr = thread_current(); curr->exit_status = status; printf ("%s: exit(%d)\n", thread_name(), status); thread_exit(); } 과제 5 : Denying Writes on Excutables 목표 실행중인 파일에 쓰기를 거부하는 코드 작성 ...

2023년 5월 8일 · 2 분 · 배준수

Pintos week02 System calls and handlers

System calls and Handlers 개요 주 목표 기존 : system call handler table 비어있음. 수정 후 Pintos의 system call handler 완성 유저에게 서비스를 제공하기 위한 시스템 콜 추가 프로세스 관련 : halt, exit, exec, wait 파일 관련 : create, remove, open, filesize, read, write, seek, tell, close 수정할 파일 threads/thread userprog/syscall userprog/process System call 운영체제가 제공하는 서비스를 위한 programming interface 유저 모드 프로그램이 커널 기능을 사용하게 해준다. 시스템 콜은 커널 모드에서 실행되고 유저 모드에게 반환한다. ...

2023년 5월 2일 · 4 분 · 배준수

Virtual Address

Virtual Address 64-비트 가상 주소는 다음과 같은 구조이다 1 2 3 4 5 6 7 8 63 48 47 39 38 30 29 21 20 12 11 0 +-------------+----------------+----------------+----------------+-------------+------------+ | Sign Extend | Page-Map | Page-Directory | Page-directory | Page-Table | Physical | | | Level-4 Offset | Pointer | Offset | Offset | Offset | +-------------+----------------+----------------+----------------+-------------+------------+ | | | | | | +------- 9 ------+------- 9 ------+------- 9 ------+----- 9 -----+---- 12 ----+ Virtual Address 헤더 include/threads/vaddr.h, 그리고 include/threads/mmu.h는 가상 주소들에서 작동하는 이러한 함수들과 매크로들을 정의한다. (offset : 상대주소(relative address), 동일 오브젝트 안에서 오브젝트 처음부터 주어진 요소나 지점까지 변위차를 나타내는 정수형) ...

2023년 4월 30일 · 3 분 · 배준수