Page Type 페이지 타입은 크게 두 가지로 나뉜다. 익명 페이지(Anomymous page)와 파일 기반(File backed page) 페이지로 나뉘는데, 차이는 디스크 안에 있는 파일이 매핑된 페이지인지 아닌지의 여부로 나뉜다. Zero & Eviction Zero 익명 페이지는 페이지를 물리 메모리를 할당할 때 반드시 내용물을 0으로 초기화해주어야 하고, 파일 기반 페이지는 그럴 필요가 없다. Q 왜 메모리를 지워야 하는가? A 메모리는 여러 프로세스 간에 global하게 shared되는데, 만약 내용물을 지우지 않는다면 다른 프로세스의 메모리 내역을 보게 될 수 있다. 이는 OS의 기본 원칙인 isolation을 위반한다. 따라서 페이지 할당 시 다음과 같은 상황이 발생한다. No 주체 벌어..
Virtual Memory: Types segemtation :: 가변 크기 page :: 고정 크기 Segmentation 주소 공간을 가변 크기로 할당하자 배경 동적 재배치(dynamic relocation / base-bound relocation)는 베이스 레지스터(base register)와 가상 주소(virtual address)를 더해 생성한 주소가 바운드(bound) 내에 있는지 확인하며 물리 메모리 주소를 배치하는 형태의 가상화이다. 그러나 이 방법은 연속적인 가상 주소를 그대로 물리 메모리에 연속적으로 할당하는데, 이 와중 스택과 힙 사이의 공간이 물리적으로 할당되지만 실제 사용되지는 않는 영역이 발생한다는 문제점이 있다. 즉, 내부 단편화가 발생한다. 이를 극복하기 위해 segment..
권영진 교수님의 OS 특강 을 기반으로 정리 및 진행하되, 가상 메모리 중심으로 정리. 정글 키워드 [더보기] 더보기 [ Index ] Jungle keyword Virtual memory management paging virtual page physical frame page table & supplementary page table Memory Management Unit (MMU) Translation Lookaside Buffer (TLB) Page type Uninitialized page Lazy initialization Anonymous page stack growth file-backed page mmap syscall Swap in/out page replacement policy s..
memory managment 구현 권영진 교수님의 특강을 듣고 정리했다. 정말 재미있었고, OS를 통해 배울 수 있는 CS지식의 기반을 정리하는 데 큰 도움이 되었다. 운영체제는 왜 필요한 걸까? 두 가지 이유가 있다. 응용프로그램이 하드웨어를 쓸 수 있도록 interface를 제공하기 위해서 응용프로그램에게서 하드웨어의 detail을 감추기 위해서. 이것을 수행하기 위해 OS의 중요 role에 대한 키워드가 세 개 있다. Abstraction :: 추상화하여 디자인하기: 하드웨어를 사용할 때 그 내부의 자세한 것들을 알 필요 없이 API만 제공한다. Protection & Isolation :: 보호와 격리를 시행한다. Sharing :: 프로세스 간 자원을 공유한다. Abstraction :: pr..
* 채용설명회 * strcut에 대한 고민 FileSystem (The Unix File System) Unix 계열(linux)의 시스템에서 프로세스가 파일을 다룰 때 필요한 개념들. 우분투(한국어) 리눅스 파일 시스템(신시내티 대학 링크, 영문) 파일 디스크립터 위키(영문) file unix file system에서 파일은 논리적으로 bytes의 steam으로 볼 수 있는 데이터의 colliection로, 가장 작은 저장장치 단위이다. 디렉토리도, 파일도, 장치도 모두 파일! 이 개념을 잘 알아야 한다. file descriptor 하나의 파일 혹은 I/O resocure(파이프나 네트워크 소켓 같은)에 대한 process-unique identifier. 프로세스가 어떤 파일에 접근할 때 그 파일을..
인스턴스 뽑기에 실패했다. 이사를 결심함. 설치를 다시 하려니 또 헷갈려서 정리하며 환경을 세팅함 정글에서는 Ubuntu 20.04 LTS (x86_64)환경을 사용 한다. $ sudo apt update # package list update $ sudo apt upgrade # upgrade packages $ sudo apt install gcc make valgrind gdb # gcc, make 등 개발 환경 설치 $ sudo apt install gcc-multilib # 32-bit lib (week 6 only) //git cli $ curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/u..