운영체제 8

PintOS Project 3 : Virtual Memory 정리

가상 메모리와 물리 메모리, 디스크와 스왑디스크, 페이지와 프레임, 보조 페이지 테이블과 pml4의 개념을 공부하며 프로젝트3 가상 메모리를 구현했다. 아래 그림은 함수의 흐름을 적어놓고 함수가 어떤 역할을 하는지 간단하게 설명했다.    1. process exec -> load -> page fault -> lazy load   2. process fork   3. swap out  case   4. swap out & destroy   5. mmap & munmap    아래는 pintos 과제를 구현한 깃허브 레포지토리로 참고하셔도 되나 설명이 부족할 수 있습니다.또한 모든 내용을 잘못된 정보가 있을 수 있으므로 확인이 필요합니다.  https://github.com/wookhyunKim/pint..

PintOS 2024.10.01

PintOS Project 3 : Virtual Memory (4) - mmap & munmap

이번 포스팅은 user 가 mmap & munmap 시스템 콜을 호출할 때 상황을 보려고 한다.프로젝트 2 시스템 콜과 같이 시스템 콜 핸들러에 mmap 과 munmap을 추가하고 do_mmap, do_munmap으로 운영체제가 유저의 요청을 처리한다. mmap과 munmap은 디스크로 부터 파일 내용을 메모리에 적재할 때 사용하며 파일을 건드리는 부분에서는 lock이 필요하다.    시스템 콜  system call handler{#ifdef VM case SYS_MMAP: f->R.rax = mmap_syscall(f->R.rdi,f->R.rsi,f->R.rdx,f->R.r10,f->R.r8); break; case SYS_MUNMAP: munmap_syscall(f->R.rdi); break..

PintOS 2024.10.01

PintOS Project 3 : Virtual Memory(3) - swap in & swap out LRU

이번 포스팅은 효율적으로 메모리 관리를 하기 위해 물리메모리에서 frame을 swap_out 하는 것을 할 것이다. LRU(Least Recently Used)는 페이지 교체 알고리즘중 하나로, 가장 오랫동안 사용되지 않은 페이지를 교체하는 방식입니다. 이 알고리즘은 메모리에서 사용되지 않은 페이지를 교체하여, 효율적인 메모리 관리와캐시 히트율 향상을 목표로 합니다.LRU 알고리즘의 기본 개념가장 최근에 사용된 페이지는 계속 유지하고, 오랫동안 사용되지 않은 페이지는 교체 대상으로 선정합니다.Least Recently Used*라는 이름 그대로, 가장 최근에 사용되지 않은 페이지를 교체합니다.LRU는 사용된 페이지의 시간 순서를 유지하면서, 오래 사용되지 않은 페이지를 찾기 위한 정보를 기록하는 방식입니..

PintOS 2024.10.01

PintOS Project 3 : Virtual Memory(2) - file load , page fault 다루기

VM 프로젝트 두 번째 포스팅은 프로세스의 execute 과정을 알아보려고 한다.프로세스의 exec는 user가 exec라는 시스템 콜을 커널에게 보내고 이를 받아서 커널이 process_exec 함수를 실행한다.process_exec 함수 내에 load 함수가 있는데 이는 실행가능 목적파일의 ELF 데이터들을 프로세스의 가상메모리로 로딩하는 함수이다.- CSAPP 7장 링커 참고  대부분의 정보는 pintOS 스켈레톤 코드에 로딩하는 코드가 있지만, User stack 과 kernel memory에 User Pool 부분에서 해주어야 하는 부분이 있다.    process_exec의 흐름을 살펴보면 다음 그림과 같다.  메모리를 효율적으로 관리하기 위해 demand paging일 때 가상 메모리와 물리..

PintOS 2024.10.01

PintOS Project 3 : Virtual Memory (1) - supplemetal page table 보조 페이지 테이블

PintOS  세 번째 과제에서는 가상 메모리를 다루는 것이다. 그 중 가장 처음에 해야할 것은 보조 페이지 테이블(supplemetal page table)을 만드는 것이었다. 보조 페이지 테이블을 spt라고 하겠다. spt는 demand page할 때 pml4에 매핑을 하기 위해 또는 물리 메모리에 load 하기 위해 필요한 임시 거처라고 할 수 있다.spt는 다양한 자료구조로 구성할 수 있는데 이전에 스레드를 관리했던 연결리스트, 배열, 해시, 비트맵 등이 있겠지만 이번에는 해시테이블 자료구조를 사용하고 체이닝 기법으로 해시값이 같은 페이지를 관리하도록 spt 를 구성했다. 해시 테이블 장점 시간 복잡도가 O(1) 이므로 빠른 검색, 삽입, 삭제가 가능하다. 또한 배열의 인덱스가 아닌 것으로 탐색을..

PintOS 2024.10.01

PintOS Project 1 : Thread (Priority)

CPU 스케줄링 중 하나의 기법인 우선순위 스케줄링은 비선점(Non- Preemptive) 방식이다. 따라서 CPU를 점유하고 있는 스레드가 우선순위가 제일 높으면, 이 스레드의 모든 작업이 끝나야 CPU를 양보한다. 또한 현재 실행 중인 스레드의 우선순위보다 높은 우선순위를 가진 새로운 스레드가 생성되었을 때, 바로 현재 스레드는 즉시 CPU를 양보한다.           여러 스레드가 동시에 같은 데이터를 조작할 때 타이밍이나 접근 순서에 따라 결과가 달라질 수 있는 상황인 경쟁 조건을 방지하기 위해 OS는 여러 스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 동기화(synchronization) 작업을 해야한다. 이 때의 공유 데이터를 임계 영역(critical section)이라고 한다...

PintOS 2024.09.01

운영체제, 추상화, 컴퓨터 시스템

디자인 설계 방법 중에는 상향식 방법과 하향식 방법이 있고, 이 두 가지 방법을 통해 OS design을 조금 이해해보고자 한다.   컴퓨터 시스템의 fundamental은 무엇이냐 ? 라고 질문에 두 가지에 대답이 있다. 1. Abstraction (추상화)2. problem decomposition (작은 단위로 문제를 나누기)    문제의 크기(개수) 와 복잡성의 상관관계는 지수적인 관계로 나타난다. 왜 비례 혹은 반비례 관계는 될 수가 없을까 ?     애초에 우리는 문제가 주어지면 우리가 문제를 하나 하나 씩 해결해야 한다고 생각하고 있다. 그러나 이는 단편적인 것으로 보았을 때 그러하고 사실 생각해야 할 것이 있다.    이렇게 문제 사이에도 관계가 발생할 수 있기 때문에 문제의 크기(개수)가..

CS 2024.08.28

PintOS Project 1 : Thread(Alarm Clock)

첫 번째 Thread 프로젝트에서는 Thread들이 어떻게 관리되는지, 외부 인터럽트를 통한 CPU scheduling, 인터럽트 비활성화를 통한 공유자원 접근에 대해서 알아야 했다.           Thread의 상태는 4개로 분류 할 수 있다.1. Running : Thread가 CPU를 점유하여 실행 중인 상태2. Ready : Thread가 실행하기 위한 준비를 마친 상태 (cpu sheduler에 의해 실행될 예정)3. Blocked(wait) : Thread가 어느정도의 CPU 점유를 한 후, 다른 Thread에게 CPU 점유를 양보한 상태4. Dying : Thread가 자신의 할 일을 모두 마친 상태  이렇게 Thread의 상태는 인터럽트 또는 CPU 스케쥴링에 의해서 변경된다. 이 과정..

PintOS 2024.08.27