OS(5)
-
Linux의 kmalloc과 vmalloc에 대해서
Linux에서 kernel 영역에서의 동적 memory allocation인 kmalloc과 vmalloc에 대해서 알아보도록 하자. Kernel은 physical memory를 page의 단위로 관리 한다. page의 크기는 architecture에 의해서 좌우 된다. 보통 32-bit x86 기반의 machine에서는 page의 크기가 4096 bytes 단위로 관리 된다. Physical memory 내의 각각의 page는 Linux kernel에서 다음의 구조체로 관리된다. struct page { unsigned long flags; // page status atomic_t _count; // ref. cnt. ... void *virtual; // explained later on.. }; ..
2021.12.19 -
Kernel Trap (트랩)
이번에는, Trap이 무엇인지에 대해서 알아보도록 하겠습니다. 어떤 process가 OS service를 사용하려고 할때, process 입장에서는 단순하게 OS의 member function의 호출을 수행하려고 합니다. 그런데, OS는 supervisor mode에서 동작 합니다. 그런데 이것을 호출한 process는 user mode에서 동작을 하고 있지요. 그래서 user-space process들에게 CPU mode를 supervisor mode로 바꾸고 OS의 fuction으로 동시에 branch 할 수 있는 방법을 design 하게 되었는데요, trap instruction이 바로 이것을 수행하는 것이다. trap instruction 즉, fancy branch instruction라고 할 ..
2021.12.19 -
TLB (Translation Lookaside Buffer) 란?
TLB (Translation Lookaside Buffer) 모든 virtual memory reference는 2개의 physical memory access가 필요함. 1. appropriate page table entry 2. the desired data straightforward virtual memory scheme이 memory access time을 2배로 만든다. 이 문제를 극복하기 위해서, 대부분의 virtual memory scheme은 TLB라고 불리는 page table entry들을 위한 특별한 고속의 cache를 사용한다. 이 cache는 memory cache와 동일한 기능을 수행한다. 가장 최근에 사용되었던 page table entry들을 저장한다. 동작 방식 만약 ..
2021.12.14 -
virtual address space
최대 4GB (archi. dep.) 접근 불가 영역도 존재 ex. 08048000 - 0804c000 prcess에게 접근 권한이 없는 메모리 주소 영역 유효한 주소의 이런 영역을 -> 메모리 영역이라고 함 segment fault 유효하지 않은 영역에 access 시 발생 memory section types 1) text section (RO) 2) data section (RW) 실행 파일의 초기값이 있는 전역 변수가 할당된 메모리 3) zero page (BSS) 초기값이 없는 전역 변수가 들어 있는 영역 4) process user space stack 5) C lib용 text, data, BSS sections 6) memory 할당 file 영역 7) 공유 메모리 구간 8) malloc ..
2021.12.13 -
process scheduling
Process scheduling linux에 관한 내용 지금까지는함수 명은 linux에 dependent하지만, 내용은 일반적인 내용 이었는데, 본 내용은 linux dependent한 내용이다. Linux의 scheduler -Non-Retal-Time scheduler -Real-Time Scheduler real time으로비춰지지는 않는다. Linux scheduling 1. Time sharing (SCHED_NORMAL; SCHED_OTHER) ready ---> run---> Exit TASK_RUNNING --------------> TASK_RUNNING ------> TASK 종료 task 생성 ^ ^ schedule() | | do_exit | | context_switch() | ..
2021.12.13