C 3주차 질문내용

heeee 2016.05.08 14:31 조회 수 : 577

Q: 질문

A: 답변

=>: 구체적으로 궁금한 부분 / 정확하지 않은 답변

* [리눅스 커널 내부구조 中]: 관련 내용 정리부분

 

질문에 대해 같이 공유했으면 좋겠습니다.

아시는 내용이 있으시면 " [Q1] 답변:  " 의 형식으로 댓글을 달아 주셨으면 좋겠습니다.

 

 

 

Q1. hyperthreed에 대하여??

 

Q2. smp (symmetric multi processor)?에 대한 개념 - 물리적 / 논리적 구조에 따른 작업역할

 

http://myfreechild.tistory.com/92

http://electronicdesign.com/digital-ics/symmetric-multiprocessing-vs-asymmetric-processing

 

Q3. 스케줄러는 언제 호출될까?? (1. 2. 번의 경우가 같은상황인가? 다른상황인가?)

1. 주기적으로 타이머 인터럽트가 발생하는데 이 인터럽트의 서비스 루틴이 종료되는 시점에 현재 수행되고 있는 태스크의 need_resched 필드를 살펴보고 스케줄링 할 필요가 있다면 스케줄러를 호출한다.

A. 1번 상황은 인터럽터 핸들러에서 태스크의 상태를 변경하거나 했을 경우 인터럽트 핸들러에서는 IRQ stack이라 context switch를 발생 시킬수 없기에 need_resched 플래그를 셋팅해서 핸들러 종료 시점에 stack을 tack의 스택으로 변경하고 스케줄러를 호출하는 상황입니다.

2. 현재 수행되고 있는 task가 자신의 타임 슬라이스를 모두 사용했거나, 이벤트를 대기하는 경우이다.

A. 2번은 H/W Timer에서 발생한 Tick Handler에서 매 tick마다 task의 time slice를 감소 시키다 0이된 순간 need_resched 플래그를 셋팅해서 인터럽트 핸들러 종료 시점에 스케줄링 시키는 케이스 입니다.

2번은 1번의 서브 셋에 가까운 상황이죠.

 

Q4. 1번상황에서 주기적인 타이머 인터럽트가 발생할때 이 타이머 인터럽트는 OS가 호출한거냐? 아니면 태스크가 호출한 타이머 인터럽트인가?

A. H/W Timer에서 발생한 인터럽트 입니다.

 

Q5. 인터럽트는 os가 핸들링 할수 있나???

 

Q6. p89 task A, task B 문맥 교환이 일어날 경우 정보가 저장되는 순서는??

 

* [리눅스 커널 내부구조 中]

커널 스택에 CPU 정보가 저장된다. (Save 1)

그런 뒤 커널이 스케줄링 코드를 수행하고 다음번 수행 대상으로 Task B를 선정하여

문맥교환을 하게 되면 여태껏 사용하던 CPU정보를 Task A의 task_struct.thread에 저장한다(Save 2)

Task B의 task_struct.thread의 정보를 복원한다(Restore1)

그런 뒤 Task B의 커널 스택에서 CPU 정보를 복원한다. (Restore 2)

 

Q7. #save 1, #save 2가 같은 값 같은데 두번 저장해서 비효율 적으로 작업을 할 필요가 있을까?(왜 두번 Save를 하는지? Save 1만 하고 커널 코드를 수행한 뒤 Restore2만 하면 되는게 아닌지.) / 문맥저장을 할 때 저장을 두번 하는 이유는?

=> 검색으로 나온 의견은 Save1에서는 EIP와 ESP등만 저장을 해서 문맥교환이 일어나지 않는 경우 불필요하게 모든 CPU 레지스터를 저장하는 오버헤드를 없앤다는 것.

즉 실제로 문맥교환이 일어나는 경우에만 모든 레지스터는 Save2에서 저장한다는 의견.

사실여부 확인이 필요하고, 맞다면 구체적으로 어떤 정보를 저장하는지 알아야 함

 

Q8. bank / node / zone의 차이점?

뱅크(bank) 접근 속도가 같은 메모리의 집합

 

* [리눅스 커널 내부구조 中]

UMA구조에서는 뱅크는 시피유 갯수와 관계없이 한개 존재 BUT NUMA구조에서는 뱅크의 개수가 CPU의 개수만큼 존재

노드(node) 뱅크를 표현하는 구조 - 리눅스의 전역 변수인 contig_page_data를 통해 접근 가능 / 복수개의 node는 리스트를 통해 관리되며 pgdat_list라는 이름의 배열을 통해 접근

즉. 리눅스는 뱅크/노드 관계를 통해서 하드웨어와 상관없이 전체 메모리를 접근,제어 할 수 있다.

존(ZONE) 노드 안에 존재하고 있는 메모리는 모두 어떠한 용도로도 사용될 수 있어야 한다.

리눅스 개발자는 리눅스가 원활하게 수행할 수 있도록 node의 일부분을 따로 관리할 수 있도록 하였다.

node에 존재하는 물리메모리 중 16mb이 하부분을 특별히 관리하기위해 자료구조를 만들어 놓았으며 이 자료구조를 zone이라 부른다.

 

http://codecat.tistory.com/entry/Virtual-Linux-Manager-%EC%A0%95%EB%A6%AC-1

 

* [리눅스 커널 내부구조 中]

커널도 페이징 단계를 거쳐야 가상주소를 물리주소로 변환할 수 있다. 그러나 커널에게는 mm_struct, pgd가 없다.

따라서 리눅스 커널은 자신을 위한 페이지 테이블을 시스템의 부팅시점에 미리 작성해놓고 이 위치를 swapper_pg_dir이라는 전역변수에 저장해 놓고 사용한다.

 

Q9. 3GB~4GB에 해당하는 커널 영역도 페이징이 되는 것인지?

=> 만약 그렇다면 ZONE_NORMAL의 896MB는 direct mapping으로 연결되어 있어서 페이지테이블이 필요 없을텐데 3~4GB 영역중 정확히 어느 부분이 페이징이 되는지. 혹시 1GB - 896MB = 128MB 부분만 페이징이 되는것인지.

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 커널 스터디 관련 Q&A 게시판 입니다. [5] woos 2016.04.09 2197
1545 [커널 리눅스 내부구조] load_balance()가 수행되는 원리는? 유니악 2016.05.28 187
1544 [리눅스 커널 내부구조] 그림 3.14 : 태스크 문맥 용어 설명? 유니악 2016.05.28 169
1543 [리눅스 커널 내부구조] 그림 3.16 : 태스트 상태 전이 ? 유니악 2016.05.28 255
1542 안녕하세요. 5월 28일부터 커널 스터디 C조에 참석하는 김진수입니다. killinggun 2016.05.27 196
1541 아키텍쳐 북스터디 관련. [6] woos 2016.05.05 562
1540 x86팀 001주차 - 2016.05.21(토) 장소 및 교재 공지 n5de 2016.05.18 186
1539 천승환님 x86 커널 분석 자료를 우측 메뉴에 추가했습니다. [2] woos 2016.05.15 239
1538 리눅스 커널 강의 추천 [8] 민준홍 2016.05.01 3961
1537 A조 인원 정리 및 오픈채팅 개설 [40] file 김형원 2016.04.26 776
1536 디엔트리 객체에 대한 질문 반짝이는물오름달 2016.05.10 200
» 3주차 질문내용 [5] heeee 2016.05.08 577
1534 VFS inode에 대해서 돌고래너구리 2016.05.08 365
1533 혹시 x86 아키텍쳐 스터디를 위해 오신분 계신가요? [10] woos 2016.05.03 504
1532 fork() 함수가 리턴을 두번하는 이유 설명 [2] 커널B조 2016.05.07 30233
1531 A조 5월 7일 참석인원 조사 [29] tjgus5 2016.04.30 440
1530 C조 5월7일 오프라인모임 참석자 조사 [39] file 뒷북 2016.04.30 592
1529 cortex-a 시리즈 PM(자료 좋네요.) file woos 2016.05.06 228
1528 커널 스터디 모임에 참여하고 싶습니다 [1] 꼬마툴 2016.05.05 323
1527 커널 스터디 모임에 참여하고 싶습니다 꼬마툴 2016.05.05 139
1526 Kernel 스터디 모임에 참여하고 싶습니다. 꼬마툴 2016.05.05 153
XE Login