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 분 · 배준수

Pintos 2주차 컴퓨터 시스템 용어 정리

Pintos 2주차 keyword 정리 1. Process Controll Block ID : 고유 이름 State : Ready, wating, terminated 등 Program Counter : 특정 프로세스가 실행해야 하는 다음 instruction의 주소를 나타낸다. CPU Registers : 특정 프로세스가 사용하고 있는 레지스터(index register, stack pointer, general purpose register, …) Memory limits List of open files CPU scheduling information : 프로세스의 우선순위. 스케쥴링 큐를 가리키는 포인터나 다른 스케쥴링 parameter. memory management information : 특정 프로세스에 의해 사용되는 메모리에 관한 정보 ...

2023년 4월 29일 · 8 분 · 배준수

Pintos 2주차 도입

Project2 : User Program 유저 프로그램을 실행하게 하는 시스템에 대해 배운다. 유저프로그램 로딩, 실행은 이미 있으나, I/O,나 상호작용은 불가능한 상태 이 프로젝트에서 시스템 콜을 통해 운영체제와 프로그램이 상호작용 하도록 해야 한다. userprog 디렉토리에서 하면 된다. project1 위에서 진행된다. project1의 코드가 project2 코드에 영향을 끼치진 않지만 이후에도 project1 테스트는 통과해야 한다. 추가 도전과제 옵션도 있음. 옵션에서는 기초 코드 틀이 없이 완전히 작성해야함. userprog/Make.vars 를 수정해야함 Background 지금까지 Pintos에서 실행해온 코드는 운영체제 커널의 부분이였다. 즉, 시스템의 privileged parts까지 완전히 접근이 가능하였다. 운영체제 꼭대기에서 유저프로그램을 시작하면, 더이상은 힘들다. 이 프로젝트가 다룰 부분이다. ...

2023년 4월 28일 · 8 분 · 배준수

PintOS Project1-1 WIL

PintOS Project1-1 Alarm Clock 구현 개요 기간 : 2023년 4월 20일 ~ 27일 주제 : Threads 과제 Alarm Clock Priority Scheduling Advanced Scheduler 배경지식 1. interrupt 기본 개념 CPU의 명령 수행속도에 비해 I.O(입출력) 연산의 속도는 훨씬 느리다. I.O 연산을 위해 CPU가 쉬면서 기다리는 것은 낭비다. I.O 연산 중에 CPU는 다른 일을 하고 있는다. I.O 연산 결과가 나오면 CPU에게 알린다. => “Interrupt” 정의 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요한 경우에 마이크로프로세서에서 알려 처리할 수 있도록 하는 것. 하드웨어 interrupt와 소프트웨어 interrutp로 나뉜다. trap이라고도 일컬어지며 프로세서에게 최근에 실행된 코드의 중단을 요청해서 event가 때맞은 방식으로 처리될 수 있도록 하는 것. 요청이 받아들여지면, 프로세서는 최근 활동을 중단시키고 state를 저장한 후 event를 처리하기 위해 interrupt handler(ISR, interrupt service routin)라고 불리는 함수를 실행한다. 종류 ...

2023년 4월 27일 · 8 분 · 배준수