[커널 20차] 1주차

2023.05.13 12:08

김희찬 조회 수:193

일자 : 2023. 05. 06

범위 : 리눅스 커널 내부 구조 1장 ~ 3장 05 태스크 문맥 (p.69)

 

 

스터디 진행 중 문의 및 논의 내용

 

Chapter 1 - 리눅스 소개

 

 

Q. SUS 단일 유닉스 규격은 누가 정의 했는가

SUS(단일 유닉스 사양)는 IEEE, 오픈 그룹, ISO/IEC JTC 1/SC 22의 대표로 구성된 공동 작업 그룹인 오스틴 그룹에서 정의하고 유지 관리합니다. SUS의 목적은 서로 다른 시스템 간의 호환성 및 상호 운용성을 보장하기 위해 유닉스 기반 운영 체제에 대한 통합 표준을 만든다.

 

 

Chapter 2 - 리눅스 커널 구조

 

 

01 - 리눅스 커널 구조

 

Q. p37 - FPU는 instruction level로 동작하는 걸로 알고 있는데, 따로 FPU 에뮬레이터 프로그램이 왜 필요한가?

A1. i386 프로세서에서는 FPU가 없었음. 따라서 부동 소수점 연산을 지원하기 위해 소프트웨어 애뮬레이션이나 기타 기술을 사용해 부동 소수점 연산을 실행해야 했음. 이후 486등 후속 세데에서는 메인 프로세서에서 지원하므로 별도 FPU 애뮬레이터가 필요하지 않게됨.

 

 

02 - 리눅스 커널 컴파일

 

 

Chapter 3 - 태스크 관리

 

 

01 - 프로세스와 쓰레드 그리고 태스크

 

Q. p52 - 텍스트, 데이터 영역은 고정인가?

A1. 전체 코드 사이즈, 및 전역 변수 등 컴파일 이후에 고정적으로 사용되므로 데이터 및 텍스트 영역은 고정적으로 사용될 것이다. text + data 이후 Heap 영역이 시작됨.

 

 

 

02 - 사용자 입장에서 프로세스 구조

 

 

03 - 프로세스와 쓰레드의 생성과 수행

 

 

Q. 53페이지 예제에서 fork() 함수를 vfork() 함수로 변경했을 떄 seg fault가 뜨는데 혹시 왜 그럴까요?

A1. return 하면 안되는데(stack 오염) return 0; 을 호출해서 그렇다. return 하면 스택포인터가 변경되어 복귀할 주소가 바뀜.

A2. vfork 는 부모의 주소 공간을 그대로 사용하므로자식프로세스가 허용되지 않은 주소를 쓰려고하므로 세그먼트 오류가 발생하게됩니다.

 

Q. 리눅스에서의 task_struct를  일반적으로 OS에서 이야기하는 Task Control Block (TCB)와 같은 개념이라고 이해하면 될까요?

A1. http://www.cs.fsu.edu/~zwang/files/cop4610/Fall2016/chapter3.pdf

A2. http://rousalome.egloos.com/v/9990123

 

 

04 - 리눅스의 태스크 모델

 

Q. 리눅스 태스크 모델에서 부모 프로세스에 대한 필드 real_parent, parent 의 차이는 무엇인가?

A1. 부모 프로세스가 종료된 프로세스인 고아 프로세스 (Orphan Process) 를 처리하는 방식과 관련이 있다. 부모 프로세스가 자식 프로세스보다 먼저 종료되면, 자식 프로세스는 고아 프로세스로 간주된다. 고아 프로세스의 리소스가 회수 될 수 있도록 parent 필드를 init (PID1)에 재 할당한다. real_parent 필드는 변경되지 않은 상태로 유지되며 fork() system call 을 통해 자식 프로세스를 생성한 원래 부모 프로세스를 계속 가리킨다.
즉, parent 프로세스가 죽으면 parent 필드가 init 프로세스로 변경되어 orphan 프로세스에 대한 리소스 관리를 보장하며, real_parent 필드는 fork()를 통해 생성한 원래 부모 프로세스를 계속 가리킨다.

 

 

Q. 프로세스와 쓰레드는 자원의 공유 정도, 다르게 말하면 격리 정도에 따라서 구분될 수 있다고 나와있는데, 여기서 linux의 container 또한 자원의 격리와 공유가 어느 정도로 이루어진다는 것을 미루어 봤을 때, 이 lxc 또한 clone, 그리고 do_fork()를 통해 이뤄진다고 볼 수 있을까요?

A1. https://www.schutzwerk.com/en/blog/linux-container-namespaces01-intro/ 위 질문에 관련 깊은 것 같은 링크 공유 드립니다.

A2. LXC는 프로세스 및 스레드와 동일한 기본 매커니즘을 사용하지만, 커널 기능을 활용해 일정 수준 이상 즉 네임스페이스, cgroups, chroot 와 같은 커널 수준 기능을 조합하여 격리 및 공유를 제공 하는 것이기 때문에 비교의 위계가 일치하진 않는다고 본다.

A3. 저도 궁금해서 찾아봤는데 clone 자체가 사용되는건 맞는것같기도 하구요.. 

https://www.redhat.com/en/blog/architecting-containers-part-2-why-user-space-matters

https://blog.devgenius.io/docking-a-docker-container-part-2-c1206e7c6677

https://selectel.ru/blog/en/2017/03/09/containerization-mechanisms-namespaces/

 

 

 

05 - 태스크 문맥

 

 

기타 공유 사항

 

  • 오늘 논점에서 조금 벗어난 거긴 하지만 잠시 찾아보니, fork syscall의 문제점을 좀더 포괄적이고 자세하게 설명하고 대안을 제시하는 paper가 있어서 공유해봅니다.

https://www.microsoft.com/en-us/research/uploads/prod/2019/04/fork-hotos19.pdf

 

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 스터디 정리 노트 공간입니다. woos 2016.05.14 626
208 [커널20차] 8주차 이경재 2023.06.24 74
207 [커널20차] 7주차 이경재 2023.06.18 78
206 [커널 18차] 108주차 kkr 2023.06.17 50
205 [커널 20차] 4주차 김희찬 2023.06.12 79
204 [커널 19차] 55 주차 Min 2023.06.10 28
203 [커널 19차] 54 주차 Min 2023.06.03 34
202 [커널 18차] 106주차 kkr 2023.06.03 65
201 [커널 20차] 3주차 김희찬 2023.06.03 73
200 [커널 19차] 52 ~ 53 주차 Min 2023.05.27 55
199 [커널 20차] 2주차 김희찬 2023.05.20 139
198 [커널 19차] 51 주차 Min 2023.05.13 45
» [커널 20차] 1주차 김희찬 2023.05.13 193
196 [커널 18차] 102주차 kkr 2023.05.07 75
195 [커널 19차] 50 주차 Min 2023.05.07 31
194 [커널 19차] 49 주차 Min 2023.04.29 55
193 [커널 19차] 48 주차 Min 2023.04.23 83
192 [커널 18차] 100주차 kkr 2023.04.22 83
191 [커널 18차] 99주차 kkr 2023.04.16 77
190 [커널 19차] 47 주차 Min 2023.04.15 41
189 [커널 19차] 45, 46 주차 Min 2023.04.10 59
XE Login