bestsource

Linux 운영 체제 클래스용 컨텐츠

bestsource 2023. 10. 16. 21:56
반응형

Linux 운영 체제 클래스용 컨텐츠

저는 이번 학기에 운영체제 수업을 위해 TA를 할 예정입니다.실험실에서는 리눅스 커널을 특별히 다룰 것입니다.

  1. 수업에서 리눅스 커널의 어떤 개념/구성요소를 다루는데 가장 중요하다고 생각하십니까?
  2. 당신의 공부에서 빠진 것이 무엇이었길 바라나요?

리눅스 커널이나 전반적인 운영체제 설계에 관한 어떤 제안이라도 해주시면 감사하겠습니다.

내 목록:

  1. 운영 체제의 관심사는 물리적 시스템리소스 관리추상화확장입니다.
  2. 빌드 프로세스의 작동 방식, 즉 아키텍처별/기계 코드 관련 내용이 주입되는 방식
  3. 시스템 호출의 작동 방식 및 모듈 연결 방법
  4. 메모리 관리 / 가상 메모리 / 페이징 및 기타 모든 기능
  5. POSIX 및 기타 시스템에서 프로세스가 생성되고, 생성되고, 소멸되는 방식
  6. 사용자 공간커널 스레드 및 프로세스 간의 차이점/
  7. 단일 커널 설계가 귀찮아지는 이유 및 대안은 무엇입니까?
  8. 스케줄링(및 일부 대체/도메인 특정 스케줄러)
  9. I/O, 드라이버 개발 및 동적 로드 방법
  10. 부팅 초기 단계 및 커널이 환경 설정을 위해 수행하는 작업
  11. 시계, mmu-less 시스템 등의 문제
  12. ... 나는 계속 할 수 있어요...
  13. IPC와 유닉스 'everything is a file' 설계 결정을 잊을 뻔했습니다.
  14. POSIX, 존재하는 이유, 존재하지 않는 이유

결국에는 타넨바움의 최신 운영 체제를 살펴보고 마하/허드의 마이크로커널 설정과 분산 및 엑소커널 같은 다른 커널에 대한 사례 연구를 수행하도록 합니다.

리눅스를 통해서도 넓은 시야를 제공하고, 나는 다시 생각합니다.

슈퍼 괴짜인 사람들에게 운영체제의 역사와 그들이 왜 그대로인지.

가상 파일 시스템 계층은 Linux 운영 체제 클래스에 꼭 필요한 필수 항목입니다.

저도 대학에서 비슷한 수업을 들었습니다.가장 실망스러웠지만 동시에 도움이 되는 프로젝트는 리눅스 운영 체제를 위한 작은 파일 시스템을 작성하는 것이었습니다.이 작업을 수행하려면 4명으로 구성된 그룹에서 2-3주가 소요되며 커널의 내부와 외부를 실제로 교육합니다.

최근에 운영체제 수업을 들었고, 프로젝트는 힘들지만, 수업에서 개념을 이해하는 데 필수적인 것이라고 생각했습니다.이 프로젝트는 리눅스 소스 코드(버전 2.6.12 또는 그 이후)로 실제로 작업했다는 점에서도 재미있었습니다.

다음은 운영 체제 클래스에서 다루어야 할 몇 가지 꽤 우수한 프로젝트/개념의 목록입니다.

  • 사용자 공간과 커널 공간의 차이
  • 프로세스 관리(즉, 프로세스 관리).fork(),exec() )
  • 합니다에 대한 작은 .fork()그리고.exec()
  • 시스템 호출의 작동 방식, 즉 사용자에서 커널 모드로 전환하는 방법
  • Linux 커널에 간단한 시스템 호출을 추가하고 시스템 호출을 실행하는 테스트 애플리케이션을 작성하여 작동을 시연합니다.
  • 커널 내/외부 동기화
  • 사용자 공간에 동기화 프리미티브 구현
  • 커널 공간에서 동기화 프리미티브가 작동하는 방식 이해
  • 단일 CPU 아키텍처와 SMP 간에 동기화 프리미티브가 어떻게 다른지 이해
  • 리눅스 커널에서 동기화 프리미티브를 사용하는 방법에 대한 지식을 보여주는 간단한 시스템 호출을 리눅스 커널에 추가합니다(즉, 작업 목록 잠금 등을 획득해야 하지만 잠금을 유지하는 동안에는 수행할 수 없는 kmalloc을 사용해야 하는 것입니다).
  • 스케줄링 알고리즘 및 리눅스 커널에서 스케줄링이 수행되는 방법
  • 자체 스케줄링 정책을 추가하여 Linux 작업 스케줄러 수정
  • 호출이란?어떻게 작동합니까?왜 호출을 하는 거지?리눅스 커널에서 어떻게 작동합니까?
  • 주소가 지정된 Linux 커널에 시스템 호출을 추가하면 해당 주소가 있는지, 스왑 아웃되었는지(또는 페이징과 관련된 다른 할당) 알려줍니다.
  • 파일 시스템이란 무엇입니까?그들은 왜 존재할까요?리눅스 커널에서는 어떻게 작동합니까?
  • 디스크 스케줄링 알고리즘 - 존재 이유는 무엇입니까?그들은 뭐죠?
  • Linux 커널에 VFS 추가

음, 저는 이번 학기에 OS 과목을 막 마쳐서 등록하려고 생각했습니다.

저는 우리가 실제 OS 자체를 가지고 놀지 않고 시스템 프로그래밍만 했다는 것에 대해 다소 실망했습니다.OS 자체에 있는 실험실에 실험실을 설치하는 것을 권장합니다. 이것은 여러분이 원하는 것처럼 들립니다.

제가 정말 즐기고 유용하다고 생각했던 한 실험실은 우리만의 malloc/free 루틴을 작성하는 것이었습니다.그것은 어려웠지만 꽤 재미있었습니다.

프로그램을 메모리에 로드하거나 메모리 관리자(예: 페이징)를 설정하는 것도 포함할 수 있습니다.

연구실의 경우, 한 가지 멋진 점은 실제 코드를 보여주고 이에 대해 토론하는 것입니다. 다른 방법이 아니라 어떤 방법으로 일이 진행된다고 생각하는지에 대한 질문을 하는 것입니다.

제가 만약 대학에 다시 오게 된다면 동기화 프리미티브, 동시성 등에 대한 심도 있는 수업을 더욱 감사히 받겠습니다.그것들은 적절한 지침 없이 접근하기 더 어려운 어려운 문제들입니다.제가 폴 "러스티" 러셀의 연설에 가서 스핀락과 다른 동기화 프리미티브에 대해 말한 것으로 기억합니다. 아마도 유튜브에서 찾을 수 있을 것이고 아이디어를 빌릴 수 있을 것입니다.

또 다른 좋은 주제(또는 학생들을 위한 연습)는 가상화를 살펴보는 것일 것입니다.특히 러스티 러셀(Rusty Russel)의 "lguest"는 운영 체제를 가상화하는 데 필요한 것을 간단한 소개로 제공합니다.그 문서들도 잘 읽힙니다.

저는 사실 봄에 당신의 설명(linux를 사용한 OS 디자인)에 딱 맞는 수업을 들었습니다.선생님이 더 넓은 이해를 해주기보다는 프로젝트에 너무 좁게 집중하는 것 같아서 저는 사실 그것에 매우 실망스러웠습니다.예를 들어, 우리의 지난 프로젝트는 futexes를 중심으로 진행되었습니다.제 파트너와 저는 그것들이 무엇인지 거의 배우지 못했고, 작동시킨 다음에 그것을 제출했습니다.저는 그 프로젝트에서 정말로 아무것도 알지 못했습니다.프로젝트 중 하나가 간단한 장치 드라이버 같은 것을 쓰는 것이었으면 좋았을 텐데요.

다시 말해, 가능한 한 많은 세부 사항을 포함하되 궁극적으로는 광범위한 개요가 제시되도록 하는 것이 좋다고 생각합니다.저는 선생님께서 이 작은 부분들을 트집 잡아 우리가 이 부분들에 집중하도록 만들었지만, 결국 저는 리눅스의 내부 작동에 대한 일반적인 이해를 얻지는 못했습니다.

또 하나 주목하고 싶은 것은 제가 왜 수업에서 얻은 지식을 유지하지 못했는지에 대한 많은 부분은 체계성이 부족했다는 것입니다.주어진 한 주도 빠짐없이 주제가 나왔고, 로드맵도 없었습니다.재료에 논리적 흐름을 부여합니다.정신 조직은 지식을 유지하는 열쇠입니다.

네트워킹 하위 시스템 또한 꽤 흥미롭습니다.패킷이 소켓 시스템 호출에서 와이어로 전송되고 반대로 전송될 때 패킷을 따라할 수 있습니다.

재미있는 과제는 다음과 같습니다.

  • netfilter를 사용하여 상태 전체 방화벽 생성
  • HTTP 로드 밸런서 생성
  • 간단한 터널링 프로토콜을 설계하고 구현합니다.

메모리 매핑 I/O 및 32비트 운영 체제에서 커널 주소 공간과 사용자 주소 지정 가능 공간 사이의 1g/3g 대 2g/2g 분할

하드 드라이브 크기에 대한 32비트 아키텍처의 제한과 이것이 파일 시스템 설계에 어떤 의미를 갖는지.

사실 64비트로 가는 것에 대한 모든 장단점, 그것이 무엇을 의미하고 왜 역사와 왜 아직도 존재하지 않는가에 대한 것입니다.

언급URL : https://stackoverflow.com/questions/996540/content-for-linux-operating-systems-class

반응형