SW 사관학교 정글(Jungle)/운영체제-PintOS 17

[PintOS Project 4 - File System] File System 이론 공부

File 일반적으로 비휘발성의 보조기억장치에 저장운영체제는 다양한 저장 장치를 file이라는 동일한 논리적 단위로 볼 수 있게 해준다. Operation(연산)create, read, write, reposition (lseek), delete, open, close 등File attribute (혹은 파일의 metadata)파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들파일 이름, 유형, 저장된 위치, 파일 사이즈접근 권한 (읽기/쓰기/실행), 시간 (생성/변경/사용), 소유자 등File system운영체제에서 파일을 관리하는 부분파일 및 파일의 메타데이터, 디렉토리 정보 등을 관리파일의 저장 방법 결정파일 보호 등Directorydirectory도 일종의 파일이다. 파일의 메타데이터 중 ..

kaist-pintos 구현 중 aws중지 후 다시 켰는데 테스트 안 돌아갈 때

aws가 자주 튕겨서 접속이 안되서 자주 aws를 중지시키고 다시 키는 작업을 했었다.aws 중지 후 다시 켰는데 갑자기 테스트가 안 돌아간다. ubuntu@ip-172-31-11-117:~/Pintos-KAIST/vm$ pintos --helpCommand 'pintos' not found, did you mean: command 'pinto' from deb pinto (0.14000-1) command 'pintod' from deb pinto (0.14000-1)Try: sudo apt install  해결방법 activate로 다시 실행시켜주면 됨

[PintOS Project 3 - VIRTUAL MEMORY] Memory management 구현 중.. 간단한 예시로 흐름 파악하기(사용자가 arr[1024]를 요구했다면!)

실제 우리 프로젝트에서 사용한 코드는 아니다. 전체적 흐름만 파악하기 위한 코드 (참고) 현재 vm_entry 버리고 page 구조체에 spt로 관리전체 흐름 요약1. 사용자 가상 주소 (UVA) 0x80400000에 배열이 선언됨.2. vm_entry가 생성되어 가상 메모리 페이지 정보를 관리.3. 배열에 처음 접근할 때 페이지 폴트 발생.4. vm_claim_page가 호출되어 해당 가상 주소를 물리 메모리로 매핑.5. 프레임을 할당받아 페이지 테이블을 통해 UVA와 KVA 및 물리 주소를 매핑.6. 배열이 물리 메모리에 할당되고, CPU는 페이지 테이블을 통해 물리 메모리에 접근. 1. 배열 선언 (arr[1024])과 가상 주소 할당배열을 선언하면, 컴파일러는 배열을 위한 메모리 공간을 가상 주소..

SW 사관학교 정글(Jungle)/운영체제-PintOS[PintOS Project 3 - VIRTUAL MEMORY] GPT가 알려주는 프로젝트3 들어가기 전에 알아야할 가상메모리 지식들

1. 가상 메모리의 기본 개념정의가상 메모리는 프로그램이 사용하는 메모리 주소 공간을 물리적 메모리(RAM)와 별도로 관리하는 메모리 관리 기법입니다. 가상 메모리는 프로그램이 실제로 사용하는 것보다 더 많은 메모리 공간을 제공하도록 합니다. 따라서 여러 프로그램이 동시에 실행될 때, 각 프로그램은 별도의 메모리 공간을 가지며, 물리 메모리에 대한 직접적인 접근 없이도 실행될 수 있습니다.필요성가상 메모리는 다음과 같은 이유로 필요합니다:메모리 보호: 서로 다른 프로세스가 자신의 메모리 공간을 보호할 수 있도록 하고, 하나의 프로세스가 다른 프로세스의 메모리에 접근하지 못하게 합니다.메모리 확장: 실제 물리적 메모리보다 큰 주소 공간을 사용하여, 더 많은 프로그램과 데이터가 동시에 메모리에 올라갈 수 있..

[PintOS Project 3 - VIRTUAL MEMORY] 가상 메모리 이론 공부2 운영체제가 관여하는 Virtual Memory

Demand Paging실제로 필요할 때 page를 메모리에 올리는 것I/O 양의 감소빈번히 사용되는 코드는 제한적Memory 사용량 감소빠른 응답 시간더 많은 사용자 수용Valid / Invalid bit의 사용Invalid의 의미사용되지 않는 주소 영역인 경우페이지가 물리적 메모리에 없는 경우처음에는 모든 page entry가 invalid로 초기화address translation 시에 invalid bit이 set되어 있으면 => "page fault"6번 7번은 사용하지 않는 비트page fault가 나면 운영체제에 넘어간다. 소프트웨어 인터럽트 발생Page Fault페이지 폴트는 프로세스가 메모리에 없는 페이지를 접근하려고 할 때 발생.예를 들어, 잘못된 메모리 주소(bad address)에 ..

[PintOS Project 3 - VIRTUAL MEMORY] 가상 메모리 이론 공부1 물리적인 메모리 관리(Memory Management)

KEY-WORDLogical Address와 Physical Address주소 바인딩 (compile, load, run(execution))MMU -> Dynamic Relocation(base 레지스터 + limit 레지스터)Dynamic Loading, Overlays, Swapping(swap in,out / backing store)Dynamic Linking(shared 라이브러리) 과 Static Linking(static 라이브러리)연속할당(first fit, best fit, compaction)과 불연속 할당(paging)페이징, 페이지 엔트리, 페이지 테이블, 다중 페이지 테이블 메모리 관리 메모리 주소의 종류와 주소 바인딩, 변환방식, 관련 용어, 물리적인 메모리 관리에 있어서 두 ..

syscall-entry.S

x86-64에서는 int 0x30이 아니라 `syscall`로 바뀌었다.시스템 콜과 Ring 0: 커널 모드 스택 전환의 이해운영체제의 핵심 개념 중 하나는 시스템 콜을 통해 사용자 모드에서 커널 모드로 전환하는 과정입니다. 이 글에서는 시스템 콜이 이루어지는 과정, 그리고 커널 모드에서의 스택 전환 과정을 구체적으로 설명합니다. 특히, 코드 예제를 바탕으로 레지스터의 역할, TSS(Task State Segment)의 의미, 그리고 Ring 0의 중요성에 대해 알아보겠습니다.1. CPU 권한 레벨: Ring의 개념현대의 컴퓨터는 보안과 안정성을 위해 CPU 권한을 여러 레벨로 나누어 관리합니다. 이를 "링(Ring)"이라고 부르며, x86-64 아키텍처에서는 일반적으로 4가지 권한 레벨을 사용합니다.R..

[PintOS Project 2 - User Program] 여러 자료 정리..(kaist 자료 등)

kaist 자료Overview1. 시스템 호출 핸들러 테이블 채우기:Pintos의 기본 설정에서는 시스템 호출 핸들러 테이블이 비어있습니다. 시스템 호출은 커널이 사용자 프로그램과 상호작용하는 중요한 수단이므로, 이 테이블을 채워서 필요한 서비스를 사용자에게 제공할 수 있도록 해야 합니다.2. 추가해야 할 시스템 호출:프로세스 관련 호출:halt: 이 호출은 시스템을 중지시키고 종료합니다.exit: 프로세스가 종료될 때 호출되며, 이 호출은 자원을 정리하고 프로세스를 종료하는 역할을 합니다.exec: 새로운 프로그램을 실행할 때 사용되며, 주어진 프로그램을 실행하면서 현재 프로세스를 대체하거나 새로운 프로세스를 생성합니다.wait: 부모 프로세스가 자식 프로세스의 종료를 기다리기 위해 사용됩니다.파일 관..

pml4(page map level 4) 페이지 테이블 최상위 레벨

pml4x86-64 아키텍처에서 사용하는 페이지 테이블(Paging) 시스템의 최상위 레벨을 나타낸다.페이지 테이블의 최상위 구조가 뭔데?쉽게 표현하자면, 페이지 테이블이 4층 건물이라면, PML4는 건물 4층에 위치한 첫 번째 입구라고 생각하시면 됩니다. 거기서부터 계단을 따라 더 낮은 레벨의 페이지 테이블로 내려가면서, 최종적으로 물리 메모리의 주소를 찾게 되는 겁니다.x86-64에서는 4단계의 페이지 페이지 테이블을 사용하여 가상 메모리와 물리 메모리 간의 매핑을 관리하는데 PML4(Page Map Level 4)는 가상 메모리 주소를 물리적 메모리 주소에 매핑하기 위한 가장 상위 레벨의 구조각 프로세스 또는 스레드가 자신의 페이지 테이블을 가리키고 관리하기 위해 사용된다.프로세스마다 다른 가상 주..

[PintOS Project 2 - User Program] System Call(시스템 콜)

시스템 콜이 들어왔을 때 💭 t1 쓰레드가 CPU running 중이다. read()라는 system call을 만나 `kernel mode`로 진입한다. t1은 실행중이던 cpu 상태를 저장한 후 디스크에서 파일을 읽을 준비를 한다. I/O 요청은 시간이 오래걸리기에 t1을 대기 리스트(waiting list)에 보내고 ready list에 있던 t2를 실행 시킨다. t2가 실행중이다가 t1이 디스크에 요청했던 read가 끝나면 I/O 컨트롤러에서 인터럽트를 발생시켜 kernel 모드로 다시들어온다. 실행중이던 t2 상태를 저장 후 t1이 요청했던 read()가 준비가 다 되었기에 ready list에 올린다.  system handler까지 실행 순서시스템 콜 호출: 사용자 프로그램이 read()와..