4월 10일
책은 리눅스 커널 심층분석(저자:로버트 러브 출판사:에이콘)으로 정했습니다.
오늘은 1장 리눅스 커널의 개요 ~ 3장 프로세스 관리까지 스터디하였고
페이지로는 38페이지까지입니다.
그리고 아래 질문들은 스터디하면서 나왔던 질문들을 정리한 것인데
못적은 것도 있고 불필요한 질문도 있을텐데.. 적은 건 모두 올립니다.
답은 댓글로 달아주세요.
질문의 내용을 철자과 개념에 맞게 조금 수정하였습니다.
1. SMP 란?
2. 운영체제의 커널 중 모놀리딕 커널과 마이크로 커널 방식의 차이점은 무엇인가? P.6
3. 가상 메모리 개념 정리
4. printf()함수와 printk()함수의 차이점은? P.17
5. DPL이란? (P.20 메모리 보호에 대해)
6. 유저영역의 메모리 주소의 범위는?
7. 프로세스 트리와 프로세스 환형은 무엇인가?
8. POSIX 스레드에서 각 프로세스와 각 스레드간에 PID와 TID의 관계는?
9. mm_struct는?
10. C 컴파일러에서 main() 함수가 리턴될 때 exit() 시스템 콜을 삽입하고 do_exit()에서 대부분의 종료처리를 하는데 왜 main() 함수 종료 시 여러가지 종료처리를 해주어야 하는지?
11. 세션리더란? 그룹리더란?
12. Shell이 죽을 때 자식 프로세서들이 죽는지? 안죽는지? 죽는다면 왜 죽는지?
감사합니다.
댓글 5
-
조태문
2010.04.11 01:50
-
조태문
2010.04.11 02:10
11. 세션이란?
세션은 그룹을 포함하는 그룹이라고 생각하면 된다. 하나의 세션은 여러개의 그룹을 가질수 있으며, 보통 login 시 생성된다. 다른경우로 데몬과 같이 자기 자신이 세션을 가져야하는 경우가 있는데 그러한 경우에 세션이 생성되기도 한다.
출저 : 조인씨위키
여담으로 나눴던 프로세스의 데몬화 과정에 대한 KLDP 포럼의 글
-
조태문
2010.04.11 02:20
8번 항의 경우 질문을 하고도 '우문'이라고 생각했습니다.
쓰레드를 사용해 본적이 없으신 분이라면 오히려 이 질문 혹은 답에 더욱 혼란이 가중될 것 같고
차후 프로세스 스케쥴링의 대한 커널 소스코드를 보면 좀 더 명확하게 해결 될 문제라고 생각합니다.
추가로 크게 상관은 없는 말이지만
리눅스에서 멀티스레드 프로그래밍을 할 때, 매우 유용하게 사용했던 기억이 있는 팁입니다.
제 기억으로 CentOS에서 gettid()를 제공하지 않는 것으로 기억하고 있습니다.
그럴 때 이렇게 하여 gettid()를 정의하여 사용하시면 됩니다. (KLDP)
-
박한범
2010.04.11 23:26
DPL = descriptor privilege level
리눅스는 아시다시피 Ring 0 와 Ring 3 로 나뉘어져 있습니다.
하지만 x86 기반에서는 CPU가 이 둘을 구분짓기 위한 어떤 기능을 따로 제공하지 않습니다.
때문에 x86 기반 OS 는 두 가지 방법으로 코드의 권한을 구분하게 됩니다.
DPL은 그 중에 하나로 설명은 다음과 같습니다.
"x86 기반 시스템에서 kernel 이나 user 동작 모드 같은건 존재하지 않는다. 그 대신, privileged instructions 의 실행과 supervisor-only 페이지에 대한 접근을 Code Segment Descriptor 의 필드인 Descriptor Privilege Level (DPL) 을 사용한다."
이것은 윈도우에서 정의되어 있는 자료형이기 때문에 리눅스와 다를 수 있습니다.
하지만 x86 이 유저모드와 커널모드를 구분하기 위한 지원을 하지 않는 만큼
리눅스도 비슷한 기능을 사용할 것입니다.
-
무명
2010.04.12 20:05
mm_struct는 메모리 디스크립터로 Memory Map 구조체입니다.
14장 프로세스 주소 영역에서 자세히 다루므로 그때 다시 보시면 될 것 같습니다.
메모리 디스크립터로는 mm_struct를 정의한다고만 기억해주세요.
프로세스 디스크립터, 파일 디스크립터 등의 디스크립터 개념도 참고해주셔야 하고요.
임의의 프로세스에서 fork() 하여 자식 프로세스를 생성하고
부모 프로세스를 죽여도 자식이 죽지 않는다는 것은 스터디 때 이야기 되었고
셸에서는 어떻게 되는지 질문이 있었는데
확인 결과 어떠한 설정도 없는 디폴트 상태에서 셸이 죽어도 셸의 자식 프로세스는 죽지 않는 것을 확인하였습니다.
다른 질문들은 모두 위에서 답변되었거나 스터디 시간에 해결되었던 것으로 생각합니다.
.
1번에 대한 위키백과의 정의입니다.
대칭형 다중 처리 또는 SMP(symmetric multiprocessing)는 두 개 또는 그 이상의 프로세서가 한 개의 공유된 메모리를 사용하는 다중 프로세서 컴퓨터 아키텍처이다. 현재 사용되는 대부분의 다중 프로세서 시스템은 SMP 아키텍처를 따르고 있다.
SMP 시스템은, 작업을 위한 데이터가 메모리의 어느 위치에 있는지 상관없이 작업할 수 있도록 프로세서에게 허용한다. 운영체제의 지원이 있다면, SMP 시스템은 부하의 효율적 분배를 위해 프로세서간 작업 스케줄링을 쉽게 조절할 수 있다. 그러나 메모리는 프로세서보다 느리다. 단일 프로세서라도 메모리로부터 읽는 작업에 상당한 시간을 소비한다. SMP는 이를 더욱 악화시키는데, 한 번에 한 개의 프로세서만이 동일한 메모리에 접근 가능하기 때문이다. 이는 다른 프로세서들을 대기하도록 만든다.
SMP는 운영체제와 메모리를 공유하는 여러 프로세서가 프로그램을 수행하는 것을 말한다. SMP에서는 프로세서가 메모리와 입출력 버스 및 데이터 경로를 공유하며, 또한 하나의 운영체제가 모든 프로세서를 관리한다. 보통 2개부터 32개의 프로세서로 이루어지며, 어떤 시스템은 64개까지 프로세서를 공유한다. SMP 시스템은 보통 MPP 시스템에 비하여 병렬 프로그래밍이 훨씬 쉽고, 프로세서간 작업 분산(workload balance)을 시키기가 훨씬 용이하지만, 확장성은 MPP에 비하여 취약하다. 또한 많은 사용자가 동시에 데이터베이스에 접근하여 일을 처리하는 OLTP 작업에서도 강점을 보인다.