[리눅스커널] 메모리관리: 가상 주소를 물리 주소 변환하는 세부 원리 알아보기
By Guillermo Austin Kim | 2019년 7월 17일 |
가상 주소를 물리 주소 변환하는 세부 원리 알아보기이번에는 가상 주소를 물리 주소로 변환하는 과정을 살펴보겠습니다. 다음 그림을 같이 보겠습니다. [그림 14.18] 가상 주소를 물리 주소로 변환하는 과정 전체 흐름도 가상 주소를 물리 주소로 변환하는 과정은 크게 2 단계로 나눌 수 있습니다. [그림 14.19] 가상 주소를 물리 주소로 변환하는 단계 1단계[그림 14.18] 가장 위쪽에 있는 주소는 TTBR(Translation Table Base Register)에 저장된 변환 테이블 시작 주소입니다. 페이지 테이블의 베이스 주소입니다. 변환 베이스 주소와 SBZ로 구분할 수 있는데 SBZ는 항상 0라는 의미입니다. 커널에서는 swapper_pg_dir 전역 변수가 이 주소를 저장합니다. 다음 ‘가
메모리
By DID U MISS ME ? | 2022년 7월 30일 |
리암 니슨이 실력 좋은 킬러 역할이라니! 그리고 그의 복수에 한 소녀가 얽혀있다니! 이 두 문장만 봐도 <메모리>에 대한 인상은 어느 정도 판가름 나기 마련이다. 어쩔 수가 없다. 그걸 관객 책임으로 돌릴 수는 없는 것이다. 그 책임은 <테이큰> 첫편 이후 공장장처럼 무성의하게 많이도 찍어냈던 리암 니슨표 액션 영화들이 모두 함께 나눠져야 한다. 하지만 그럼에도 불구하고, <메모리>는 최근 3~4년간 만들어진 그저 그런 리암 니슨표 중소 규모 액션 영화들과는 조금 구분지어져야만 하는 영화처럼 느껴진다. 엄청 잘 만들었다는게 아니다. 영화의 만듦새는 여전히 다소 아쉽지만, 그래도 그 안에서 뭔가를 해보려 했다는 것이 귀중 하다는 소리다. 열려라, 스포 천국! 중
[리눅스커널] 동기화: 스핀락(spinlock) 처리 흐름도 알아보기
By Guillermo Austin Kim | 2019년 9월 12일 |
스핀락을 분석할 때 스핀락을 획득한 후 임계 영역을 실행할 때 바뀌는 자료구조를 함께 파악하는 것이 중요합니다. 이번에 스핀락을 관리하는 spinlock_t 구조체를 다시 보면서 스핀락 자료 구조를 설명을 드리겠습니다.(spinlock_t *) (spinlock_t*)0xb7e0eb00 (struct raw_spinlock) rlock = ( (arch_spinlock_t) raw_lock = ( (u32) slock = 0x134C134C, (struct __raw_tickets) tickets = ( (u16) owner = 0x134C, (u16) next = 0x134C)))) 위와 같이 spinlock_t 구조체는 서로 다른 아키텍처에서 스핀
[리눅스커널] preempt_disable() 함수: 스케줄링을 지원하는 함수 실행 금지
By Guillermo Austin Kim | 2020년 2월 20일 |
preempt_disable()/preempt_enable() 함수를 사용할 때 주의해야 할 점이 있습니다. 그것은; * preempt_disable()/preempt_enable() 함수를 사용하는 구간에서 스케줄링을 지원하는 함수가 호출되면 안된다. 라는 점입니다. 다들 아시다시피, 커널 드라이버에서 preempt_disable() 함수를 호출하면 프로세스 struct thread_info 의 preempt_count를 +1만큼 증가시켜 Preemption을 비활성화합니다. 다음 예제 코드를 보면서 설명을 시작 하겠습니다. bool try_module_get(struct module *module)02 {03 bool ret = true;0405 if (module) {06 + preempt