운영체제 32

PintOS Project 3 - Virtual Memory (2) Anonymous Page (정글사관학교 79일차 TIL)

바로 2번째 과제 달린다. 이번에는 Anonymous Page를 구현하는 것이 과제 목표. Gitbook 정리는 아래 노션 링크를 통해 참고하도록 하자. Part 2: Anonymous Page Anonymous: 어떤 파일과도 연결되지 않은 페이지를 뜻함. 주로 stack or heap에 사용된다. woony.notion.site 0. Anonymous page 정리 전에 권영진 교수님 강의 말미에서 잠깐 나왔던 개념인데, 드디어 다루게 되다니 감개무량하다. 페이지에는 크게 두 가지 종류가 있다. 1. Anonymous page: 어떤 파일과도 연결되지 않은 페이지 2. File-backed page: 파일과 매핑된 페이지(즉, 페이지 안에 파일이 들어있는) 어차피 File-backed page는 나중..

PintOS Project 3 - Virtual Memory (1) Memory Management (정글사관학교 78일차 TIL)

첫 번째 과제는 supplemental page table 구현이다. 이를 위해 supplemental page table이 무엇인지 먼저 간단히 살펴보자. supplement page table은 이전에 정리했던 개념인 다단계 페이지 이제 과제 개요를 살펴본다. 0. 과제 개요 Implement supplemental page table management functions in `vm/vm.c`. 우리의 핀토스는 pml4라는 페이지 테이블을 갖고 있는데 얘는 가상 메모리와 물리 메모리 간 매핑을 관리한다. 하지만, 이것으로 충분치 않음. 이전 섹션에서 논의했듯, 우리는 page fault와 자원 관리를 다루기 위해서 각각 페이지에 대한 추가 정보를 들고 있는 supplementary page tabl..

운영체제 (5) 메모리 관리 - 3(정글사관학교 77일차 TIL)

한동안 TIL 정리가 많이 밀렸다. 다시 정신차리고 가보자!! 메모리 관리 3 Multilevel Paging and Performance address space가 커지면 다단계 페이지 테이블이 필요하다. (why? 사용하지 않는 공간을 엔트리로 넣어야 하니 페이지 테이블이 커져서 비효율 증가) 이러면 페이지 테이블에 여러 번 접근해야 한다. ex) 4단계 페이지 테이블이면? 4번 접근해야 한다. 그런데도 다단계 페이지 테이블을 쓸 수 있는 이유는? TLB! ex) 메모리 접근 시간이 100ns, TLB 접근 시간이 20ns이고 TLB hit ratio = 98%라면? effective memory access time = 0.98 * 120(100*1 + 20*1) + 0.02 * 520(100*4 ..

운영체제 (4) 메모리 관리 - 1, 2(정글사관학교 74일차 TIL)

오늘은 갓효경 강의를 들었다. 오늘 효율이 개쌉망이라 강의 두 개 들은게 전부네..ㅁㅊ.. 노션에 정리해서 여기다 옮겨야 하는데, 일단은 링크로 대체..강의 다 듣고서 리마인드할 때 정리하자! (이제까지 썼던 TIL 중 역사상 가장 짧은 TIL이 될 것 같아..키워드만 조금 정리) 메모리 관리 1 논리 주소 vs 물리 주소 논리 주소: 각 프로세스마다 독립적으로 갖는 주소 공간(0번지부터 시작) cpu가 보는 주소는 여기에 해당 물리 주소: 메모리에 실제로 올라가는 위치 주소 바인딩: 프로그램이 메모리 내 물리 주소 어디에 올라가는지를 결정하는 것 symbolic addr => logical addr => physical addr 과정을 거치는데, 이 중 logic => physic 이 부분에 해당하는 ..

PintOS Project 2 - User Program (8) System Call(정글사관학교 71일차 TIL) - 프로세스 관련 system call 구현

대망의 마지막 시스템 콜 파트.. 하지만 구현이 전부가 아니다. 구현 100점 하면 뭐하나. 이해 못하면 말짱 꽝이다. 어차피 정답은 검색하면 다 나온다. 내가 해야 할 것은 이게 왜 맞고 틀린지, 뭐가 좋고 안 좋은지, 대체 이 흐름이 어떻게 진행되고 있는 건지를 이해하는 것. 근-본을 이해하지 못하면 백날 구현해봤자 쓸데없다. 면접 가서 "구현 다했습니다!"라고 하면 "와..구현을 다 하셨다니 대단해요!"라고 할 줄 아나. "그래서 뭘 이해했죠? 뭘 배웠죠? 그걸 왜 썼죠? 왜 쓰면 안되죠? 더 나은 방법은 없나요? 예를 들면 이런 상황에서는 그걸 쓸 수 있나요?" 이런 거 물어본다. 구글링하다 보게 된 면접 후기 글에서 이런 말이 있더라. 예를 들어, Deadlock 해결방법에 대한 질문에 프로세스..

PintOS Project 2 - User Program (7) System Call(정글사관학교 69일차 TIL) - 파일 디스크립터 관련 system call 구현

저번 글에서 핀토스 부팅부터 시작해 시스템콜이 호출되기까지의 과정을 정리했다. 다시 보니 빠진 내용이 많아 수정하면서 보완할 예정. 저거 공부하느라 한동안 밀렸던 과제를 다시 진행한다. 오늘은 저번에 구현한 exit() 수정 및 write(), open(), close(), filesize(), seek(), tell()을 구현해보자. 1. 과제 구현 exit() & thread 구조체 수정 지난 번 글에서 exit()을 미처 완성하지 못한 것을 깨달았다. 여기서 수정 과정에 대해 기록한다. exit()은 현재 프로세스를 종료시키는 시스템 콜이다. 이때 종료시키려는 스레드의 status를 바꿔줘야 한다. 따라서 아래처럼 exit_status 멤버를 스레드 구조체에 하나 만들어준 다음, exit에서 해당 ..

PintOS Project 2 - User Program (6) System Call(정글사관학교 68일차 TIL) - system call 흐름 정리

시스템 콜 과제 이어서. 한양대 핀토스 pdf에서는 이 챕터를 process hierachy라고 명명하는데, 그냥 system call로 이어서 하겠다. 지난 과제에서는 halt(), create(), remove(), exit()에 대해 정리했다. 여기서 잠시 리마인드해보기. 이 과제를 왜 하고 있지? 지금 우리가 하는 일은 시스템 콜 핸들러를 구현하는 것이다. 왜 이게 필요하지? 유저 프로그램에서 운영체제 혹은 하드웨어에 직접 접근하지 않고 커널에다가 요청(시스템 콜)만 하면 운체가 시스템 콜 핸들러를 이용해 내부적으로 작업하고 결과값만 휘리릭~하고 넘겨주기 위한 것이다. 이 작업으로 유저 프로그램은 복잡한 아랫단까지 내려갈 것 없이 결과만 호로록 받으면 되는 것! 뿐만 아니라 이렇게 작업하면 유저 ..

PintOS Project 2 - User Program (5) System Call(정글사관학교 67일차 TIL) - halt(), exit(), create(), remove()

1. 과제 목표: 시스템 콜 핸들러 및 시스템 콜 구현 Gitbook 설명을 보기 전에, 먼저 시스템 콜의 개념부터 살펴보자. (참고로, user memory access 파트는 시스템 콜의 일부로 check_address()를 구현하는 파트이다. 따라서 시스템 콜 구현에서 함께 설명한다.) 시스템 콜이란? 시스템 콜은, 위 이미지에서 얘기하는 것처럼 운영 체제가 제공하는 서비스에 대한 프로그래밍 인터페이스이다. 유저 프로그램이 함부로 OS에 접근하다가는 보안부터 시작해서 여러 문제를 야기할 수 있다. 또한 이전에 얘기했듯, 유저 프로그램이 하드웨어 단까지 내려가서 작업하는 게 여간 복잡한 게 아니다. 이를 위해서 운영체제를 제공한 것인데 운영체제 내부도 여간 복잡한 게 아니지 않겠나. 따라서 OS의 중..

PintOS Project 2 - User Program (4) User memory access 관련 개념 정리 - 주소 변환, 세그멘테이션, 페이징(정글사관학교 66일차 TIL)

1. 개념 정리: 전에 이어서 계속 주소 변환의 원리 먼저 위에서도 언급했듯, 운영체제 단독으로 주소 변환 작업을 하는 게 아니라 하드웨어의 지원을 받는다. 효율성을 높이려면 하드웨어의 지원을 받는 것이 좋다. C언어가 파이썬보다 빠른 것처럼 전기적 신호(=HW)가 C언어(=SW)보다 훨씬 빠르지 않겠나. 여기에는 TLB, 페이지 테이블 등이 필요하다. 주소 변환을 통해 하드웨어는 명령어 반입, 탑재, 저장 등의 가상 주소를 정보가 실제로 존재하는 물리 주소로 변환한다. 하지만 하드웨어는 가속화에 도움을 줄 뿐, 실질적인 메모리 가상화는 운영체제가 구현해야 한다. 따라서 운영체제는 메모리의 빈 공간과 사용 중인 공간을 항상 알고 있어야 하고, 메모리 사용을 제어하고 관리한다. 이 모든 작업의 목표는 프로..

PintOS Project 2 - User Program (3) User memory access 관련 개념 정리 - 메모리 가상화(정글사관학교 65일차 TIL)

1. 과제 설명 시스템 콜을 구현하기 위해 유저의 가상 주소 공간에 접근할 수 있는 방법을 제시해줘야 한다. 인자를 받아올 때는 이 기능이 필요하지 않았다. 하지만 시스템 콜 인자에서 제공하는 값에 접근하기 위해서는 이 기능이 필요하다. 잘못된 포인터, 커널 메모리, 블록을 가리키는 포인터의 경우 자식 프로세스를 종료해 처리해야 한다. ex) *ptr->value 형식으로 값을 넣어줄 때 큰일날 수 있기 때문에 이를 미리 확인하여 잘못된 경우 종료시킨다. 2. 개념 정리: User space memory access from the kernel 처음에는 이 파트가 그냥 넘어가도 되는 건 줄 알았는데, 보니까 이것도 하나의 과제가 맞는듯. 일단 위의 과제에서 말하는 것처럼 시스템 콜을 구현하기 위해서는 유..