기본 콘텐츠로 건너뛰기

[번역] Linux Device Drivers, 2nd Edition ( chap13 )

13장 mmap and DMA

( by Alessandro Rubini & Jonathan Corbet )

-----------------------------------------------------------------------------------------------

* 2005년에 개정 3판이 나왔지만, 보유하고 있는 2판으로 작업. 몇 년만에 다시 접하는 리눅스 디바이스 드라이버에 대하여 학습을 목표로 번역을 시작한다. 11월 목표.

-----------------------------------------------------------------------------------------------

 이번장은 디바이스 드라이버 쓰기 기술이 중요한 리눅스 메모리 관리 영역을 연구한다. 이번 장의 소재는 무엇보다 향상된 것이고 누구나 이해할 만한 것은 아니다. 그럼에도 불구하고, 많은 작업들이 메모리 관리 서브시스템내에 깊이 이해되어야 할수 있는 것들이다; 이것은 어떻게 커널 동작의 중요한 영역이 되는지 흥미로운 관점을 제공하기도 한다.


이번장의 소재는 세가지 세션으로 나눠진다. 첫번째는 mmap 시스템 콜의 구현에 대한 것이다. mmap 시스템 콜은 디바이스 메모리 맵을 직접 사용자 프로세스의 주소 공간에  허용하게 한다. 우리는 그때 커널 kiobuf 메커니즘을 포함한다. 이것은 커널 공간으로부터 사용자 메모리에 직접 접근을 제공한다. kiobuf 시스템은 디바이스의 어떤 종류를 위해 "raw I/O"를 구현하기 위해 사용되기도 한다. 마지막 세션은 다이렉트 메모리 접근(DMA) I/O 동작에 대한 것이다. 이것은 주변 소자들이 시스템 메모리에 직접 접근하도록 도와준다.


물론, 이 기술들이 모두 리눅스 메모리 동작에 대한 이해를 요구한다. 따라서 리눅스 메모리의 서브 시스템의 개요에 대한 설명으로 시작한다. 


Memory Management in Linux 

이 세션에서는 운영 시스템에서 메모리 관리에 대한 이론을 설명하는 것보다는 그 이론의 리눅스 구현의 주요 특징을 정확히 하려고 한다. 독자가 mmap을 구현하기 위해 리눅스 가상 메모리 구루가 될 필요는 없지만, 어떻게 동작하는지에 대한 기본 개요는 유용하게 쓰일 수 있다. 다음 사항은 메모리를 관리하기 위한 커널에 의해 사용되는 데이터 구조에 대한 상당히 긴 설명이다. 필요한 배경 지식을 한번 다룬 후에는 이 구조를 이용하여 작업을 시작할 수 있다.

Address Types

... to be continued ...



댓글

이 블로그의 인기 게시물

[QT] 5.15.2 버전 다운로드와 설치하기

1. 버전 5.15.2를 설치하기 위해 QT 다운로드 사이트 에 접속하였으나 실행파일이 존재하지 않는다. 가장 최신의 실행파일은 ver5.14.2 이므로 일단 이것을 다운받아서 설치한다. ( 참고 사이트 - https://sloth-code.tistory.com/6#comment16833678 ) 다운 사이트  - https://bio.nic.funet.fi/pub/mirrors/download.qt-project.org/archive/qt/5.14/5.14.2/  ------------- 버전이 맞지 않으니 재 설치한다. 2.  5.15.2 버전에는 실행파일 exe가 없고 zip과 tar.gz 파일만 존재한다. ( https://bio.nic.funet.fi/pub/mirrors/download.qt-project.org/archive/qt/5.15/5.15.2/ ) OFFLINE_README.txt를 읽어보면 5.15 버전부터는 오픈 소스 오프라인 설치를 이용할 수 없다고 한다. 오프라인 설치를 원할 경우 다음 사이트 참조하라고 한다.  ( 원본:  The Qt Company offering changes, open source offline installers are not available any more since Qt 5.15. Read more about offering changes in the https://www.qt.io/blog/qt-offering-changes-2020 blog. If you need offline installers, please consider our new Qt for Small Business offering: https://www.qt.io/blog/available-now-qt-for-small-businesses ) - https://www.qt.io/blog/available-now-qt-for-small-businesses ...

Windows에서 MongoDB 사용하기 요약

NoSQL에 대한 이해 MongoDB에 대한 이해 MongoDB 메뉴얼 MongoDB 다운받기 - Community GUI를 설치하는 대신에 zip 파일선택하여 Shell Window에서 운영. ( mongdb.com ) MongoDB 서버 사용하기 - Command Interpreter Demon으로 실행하기 : 이 방법( --fork 옵션 )은 윈도우에서 실행되지 않고, 대신에 --install 옵션을 사용하여 윈도우 서비스에 등록하여 백그라운드로 사용한다. 관리자 모드 로 명령 프롬프트를 실행한다. demon을 실행시킨다. ( --install 옵션 추가 )   mongod --dbpath D:\Working\MongoDB\Server_JServer\mongodb_ver4.2.1\data --port 13100 --bind_ip_all --auth --logpath   D:\Working\MongoDB\Server_JServer\mongodb_ver4.2.1\log\mongod.log --install 명령 라인에 다음 명령을 입력한다. net start MongoDB 윈도우 서비스 창을 열어서 아래 내용을 확인한다. 배치 파일로 자동 실행하기 Demon으로 실행하는 방법의 2번과 3번을 한번에 처리하기 위해 생성한 mdbexe.bat 을 사용한다.  방법 mongodb demon을 실행하기 위한 mongod.cfg configuration 파일을 만든다. 배치 파일에 mongod 커멘드와 옵션을 다음과 같이 기술한다. mongod --config filename --install 배치 파일에 MongDB 서비스를 윈도우 서비스에 등록한다. net start MongoDB 만들어진 배치 파일을 관리자모드 로 실행시킨다. C#에서 구현할 때 관리자 모드로 실행하는 방법 조사할 것. ( TODO ) 종...

[ ChatGPT ] 임의의 프로세스에 접근하여 임의의 변수값을 바꾸기 위한 방법

 질문 사항 1번 프로세스와 2번 프로세스가 있어. 1번이 운영중인데, 2번 프로세스에서 1번 프로세스의 임의의 메모리에 접근하여 그 메모리의 값을 바꾸고 싶어. 어떤 절차를 이용해야 하지? 답변 내용 1번 프로세스의 메모리에 2번 프로세스에서 접근하여 값을 변경하는 것은 매우 민감한 작업이며, 운영 체제에서는 일반적으로 이러한 작업을 보안과 안정성 때문에 제한합니다. 그러나 특수한 경우, 특히 시스템 프로그래밍이나 디버깅 목적으로는 특정 API를 사용하여 이러한 작업을 수행할 수 있습니다. 아래는 이러한 작업을 수행하기 위한 일반적인 절차를 설명합니다. 1. 프로세스 권한 확인 및 확보 2번 프로세스가 1번 프로세스의 메모리에 접근하려면 충분한 권한이 있어야 합니다. 일반적으로 이는 관리자 권한이나 루트 권한이 필요합니다. Windows에서는 SeDebugPrivilege 를 활성화해야 할 수 있으며, Linux에서는 루트 권한이 필요할 수 있습니다. 2. 1번 프로세스의 핸들 획득 2번 프로세스가 1번 프로세스의 메모리에 접근하려면 먼저 1번 프로세스의 핸들을 얻어야 합니다. Windows : OpenProcess 함수를 사용하여 1번 프로세스의 핸들을 얻습니다. 이 함수는 1번 프로세스의 프로세스 ID를 기반으로 접근합니다.