Linux(7)
-
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 -
Linux kernel Bottom half 정리 (softirq, tasklet, workqueue) - part 1
* bottom half 사용 이유 1. 다른 코드를 너무 오래 동안 중단시켜서는 안 됨 2. 처리 중인 interrupt를 비활성화 시킨 상태에서, 최악의 경우 IRQF_DISABLED가 설정되지 않은 경우, 현재 procesor의 모든 interrut를 비활성화 시킨 상태에서 실행 됨 즉, 오래 걸리면 interrupt가 무시될 수 있음 3. 휴면 상태가 될 수 없음 cf. 일반적인 bottom half는 tasklet을이용해 구현하는 것이 좋다. 1) 동적생성 가능 2) 빠른편 3) 사용이간단 (multi-processor에대한 신경을 안 써도 됨) state를 둬서 이미 실행 중인 것은 실행 안 하게 함 ISR은 interrupt 수신상태를 확인 등의 간단한 작업만 수행해야 함 그래야 interr..
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 -
vmalloc
물리적으로 연속될 필요없이 가상적으로 연속된 memory 영역을 할당한다는 점을 제외하면 kmalloc()과 유사한 방식으로 동작 malloc()함수가 반환하는 page는 process의 가상 주소 공간에서 연속된 공간이지만, kmalloc 함수는 할당된 page가 물리적으로도 (그리고 가상적으로도) 연속된 공간이라는 것을 보장 많은 architecture에서 hardware 장치는 memory 관리 장치가 없는 곳에 살고 있어서, 가상 주소를 처리할 수 없다. (no IOMMU) 특정한 경우에만 물리적으로 연속된 memory가 필요함에도 불구하고 kernel에서는 메모리를 할당할 때 대부분 vmalloc이 아닌 kmalloc을 사용 이는 주로 성능 때문 vmalloc은 상당량의 page table 항목..
2021.09.21