[커널 20차] 16주차

2023.08.20 21:26

이민찬 조회 수:132

 

 

2023.08.19 (16주차) - 약 13명 참여

1. 리눅스 커널 6.4.2 분석 

head.S : create_idmap의 map_memory까지 진행

 

Q.: 페이지 크기가 4K인 경우, SWAPPER_PGTABLE_LEVELS는 CONFIG_PGTABLE_LEVELS보다 1 작은 값으로 설정합니다. 그 이유는 무엇인가요?

A1: 주석을 보면 커널 이미지가 2M align 되어있고, 페이지 크기가 4K인 경우 섹션 매핑을 사용할 수 있기 때문이라고 나와있습니다. 

A2: http://jake.dothome.co.kr/head-64-60/

jSadqbnRWVWfDgvgyMQzrNBPp0Ja8PpQLiPtLEyZ

 

Q.:  b.ls에서 ls는 작거나 같은 경우를 의미한다. 이 때, 작거나 같은 경우인지 어떻게 판단하나요?

A1: cmp 명령어에서 플래그를 만드는데, 작은 경우는 C 플래그가  0인 경우이고, 같은 경우는 Z 플래그가 1인 경우입니다. 따라서 C 플래그가 0이거나 Z 플래그가 1이라면 조건에 부합합니다. 

A2: https://ezbeat.tistory.com/359

A3: 

 WfxktUX8l-s0FN3uO2NdrXjD48uZ9b7WEAqiAPJt (32bit의 경우)

cmp에 사용되는 연산은 빼기(substract) 입니다.

 

Q: pgd, pud, pmd를 만드는 과정에서 인덱스에 대한 질문입니다. pgd는 0번 인덱스가 사용됐지만, pud는 1번 인덱스가 사용된 이유가 뭔가요?

A1: 인덱스를 istart와 iend에 의해 결정이 되는데, istart와 iend는 가상 주소의 비트에 의해 결정이 된다. 결국에는 주소에 따라 시작 인덱스는 달라진다.

A2: 각 페이지 테이블이 커버할 수 있는 주소 범위의 크기를 보게 되면, 어떤 인덱스에 값이 들어가는지는 당연하게 된다. pgd의 각 엔트리는 512GB를 커버할 수 있는데, 매핑하려는 주소 크기가 512GB 보다 작으므로 pgd의 0번 인덱스를 사용하였다. pud의 각 엔트리는 1GB를 커버할 수 있는데 1GB = 0x4000_0000이므로 pud에서는 1번 인덱스는 1G~2G를 커버하므로 pud에서는 1번 인덱스가 쓰인다.  520cyhHu5jkTzPSbsL71NsZL6lsAraY2TR9li9RO

A3: 예를 들어, 커널이미지 0x4020_0000 ~ 0x4308_0000 주소를 커버하는 PGD는 언제나 0, PUD는 언제나 1, PMD는 1~24 입니다.


 

Q.: pmd를 만드는 과정에서 SWAPPER_BLOCK_SIZE 라는 심볼이 사용됩니다. 이 변수의 이름에서 SWAPPER는 무엇을 의미하나요? swapper page table과 관련이 있나요?

1) Swapper process란?

A1: https://wiki.kldp.org/KoreanDoc/html/Boot_Process-KLDP/swapper.html

A2: pid 가 0 인 swapper 프로세스만은(이건 프로세스라기 보다는 운영체제 자체라고 해도 좋을 거 같습니다.) 부모가 존재하지 않는 프로세서.

A3: "잠들어" 있는 프로세스를 메모리에서 내려서 디스크 공간에 잠시 "스왑” 역활을 하는 프로세스

      

2) Swapper page table 이란?

A1: Swapper process가 운영체제(커널) 그 자체라고 설명하는것을 봐서 리눅스 커널을 mapping한   Page Table이 아닐까 하는 추측을 할수 있다.

 

Q: 페이지 테이블 PAGE_SHIFT, PMD_SHIFT, PAGE_SIZE, PMD_SIZE 등들 설명

A1: https://www.kernel.org/doc/gorman/html/understand/understand006.html

A2: PAGE_SHIFT, PMD_SHIFT

Gqu3hVJOXxgu-b406IMJ4aI5rkkeVHElU8SpQb5y

 

  1. PAGE_SIZE, PMD_SIZE1v60qg_84Lo9zmoP7szDL3_-GIkN6ylTDCKYNDlj


 

Q.:  PMD_TYPE_TABLE 0x03, SWAPPER_RX_MMUFLAGS 0x781과 같은 flags가 시스템에 어떻게 반영되나요? 주소의 하위 12비트에 플래그 값을 써주는 것만으로 해당 주소에 대한 권한을 설정할 수 있다는 것이 이해되지 않습니다.

A1: Armv8 엔트리 포맷을 보면 하위 12비트의 쓰임을 알 수 있다.

A2: 

lmeJm1liX6UiPsHigB_gBK9CtMQTO8fWWg0zOVQA

A3: Lower attribute

PgVZl394DJTCkh0JIOdi6mNztbeawmR0Ik2HLPKb

A4: http://jake.dothome.co.kr/pt64/ 

A5: 더 자세한 내용은 찾아봐야 할 것 같습니다.

 

Q.: 완성한 pgd, pud, pmd

  1.  

0_RjEKl1UJ5ARHZWrTHgOvnyR976b3TVI7ViTGRQ

 

2. 디버깅을 통해 배우는 리눅스 커널의 구조와 원리

~4.9 스레드 정보: thread_info 구조체 까지 진행 

 

 

4.8 태스크 디스크립터(task_struct 구조체)

Q:  자식 스레드가 존재할 수 있나요? (4.8.1,  205p)

4.8.2 바로 위에 "자식스레드인 경우 tid, pid가 다릅니다"

저 부분이 자식 스레드가 아닌 자식 프로세스여야하는거 같습니다

A1: 리더스레드가 아닌 스레드라고 생각합니다.

A2: 질문에서 남겨주신 것처럼 POSIX에서 스레드 간 상하 관계가 없다고 알고 있습니다. 여기서의 스레드, 프로세스 표현은 엄밀하게 쓰이지 않은 것 같습니다. 이전 장에서도 커널 프로세스와 커널 스레드를 구분하지 않은 것을 볼 수 있었습니다.

 

Q.: task_struct 구조체에서 연결리스트를 사용하는 이유는 무엇인가요? 

A1: 여러 자료 구조를 사용하지만, 필요에 의해 연결리스트를 사용하였다. 

A2: https://velog.io/@mythos/Linux-Tutorial-19-linked-list-%EC%99%80-listsort-%ED%95%A8%EC%88%98

A3: https://satisfactoryplace.tistory.com/200

 

4.9 스레드 정보: thread_info 구조체

Q.: task_struct는 연결리스트이고 thread_info는 스택인 이유는 무엇인가요?

A1: task_struct가 연결리스트인 것은 아닙니다. 또한 thread_info가 스택인 것도 아닙니다. task_struct, thread_info, 스택, 큐 등은 모두 자료 구조입니다. task_struct의 tasks 필드가 연결리스트로 구현이 되어있고, 프로세스마다 스택 공간이 할당되는데 thread_info 구조체는 이 스택의 최상단에 위치하고 있습니다.

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 스터디 정리 노트 공간입니다. woos 2016.05.14 627
228 [커널 20차] 20주차 [2] 이민찬 2023.09.17 182
227 [커널 20차] 19주차 이민찬 2023.09.10 103
226 [커널 20차] 18주차 이민찬 2023.09.03 85
225 [커널 20차] 17주차 이민찬 2023.08.27 129
» [커널 20차] 16주차 이민찬 2023.08.20 132
223 [커널 19차] 64 주차 Min 2023.08.19 91
222 [커널 20차] 15주차 이민찬 2023.08.13 126
221 [커널 19차] 63 주차 Min 2023.08.12 60
220 [커널 19차] 62 주차 Min 2023.08.05 79
219 [커널 20차] 13주차 이민찬 2023.07.30 107
218 [커널 19차] 61 주차 Min 2023.07.30 45
217 [커널 20차] 12주차 이민찬 2023.07.22 87
216 [커널 19차] 59 ~ 60 주차 Min 2023.07.22 37
215 [커널 18차] 113주차 kkr 2023.07.22 78
214 [커널20차] 11주차 이경재 2023.07.15 86
213 [커널20차] 10주차 이경재 2023.07.09 90
212 [커널20차] 9주차 이경재 2023.07.02 85
211 [커널 19차] 58 주차 Min 2023.07.01 41
210 [커널 19차] 56 ~ 57 주차 Min 2023.06.25 40
209 [커널 18차] 109주차 kkr 2023.06.24 33
XE Login