기본 콘텐츠로 건너뛰기

[번역] 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 ...

C# dll 파일들을 지정 폴더에서 사용하기

C#으로 여러 프로세스를 생성할 때, 각각의 프로젝트에서 사용하는 dll을 공동으로 사용하게 된다. 이때 dll은 실행 파일과 같은 폴더내에 존재해야 실행할 수 있다. 같은 dll을 사용하고 관리하는 관점에서 복사하는 일은 효율성이 떨어지며 항상 버전에 신경을 써야 하는 불편함이 있다. 이와 같은 비효율성을 제거하고자 실행파일과 다른 폴더에 있는 dll에 접근하는 방법으로 다음과 같은 방법을 사용하고자 한다. 코드를 수정하지 않고 지정할 수 있는 방법이 가장 편리하고 단순하겠지만 이와 같은 방법은 서브 폴더를 이용하는 방법밖에는 없다. dll이 필요할 때 발생되는 이벤트 핸들러를 추가하고 이를 등록하여 지정된 폴더를 사용할 수 있도록 코드를 추가하여 해결한다. 참고 사이트:  http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=169705&ref=169702 * dll 필요할 때 발생되는 이벤트 핸들러 추가 static   System.Reflection.Assembly RsveAssem( object   sender, ResolveEventArgs args) {      System.Reflection.Assembly thisAss = System.Reflection.Assembly.GetExecutingAssembly();      var name = args.Name.Substring(0, args.Name.IndexOf( ',' )) +  ".dll" ;             if ( name ==  "abc.dll"   )      {    ...

[MongoDB] C# 으로 작성한 응용 프로그램에서 몽고DB 접근할 때 발생하는 에러

1. System.IO.FileNotFoundException - 해당 기능을 수행할 때 작업 PC에서 발생하지 않는 메시지가 사용자 PC에서 발생하여 해결하기 위해 정리한다. - .Net Framework 4.6.1 에러 메시지 +-----------------------------------------------------------------------------------------------+ System.IO.FileNotFoundException: 파일이나 어셈블리 'System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 지정된 파일을 찾을 수 없습니다. 파일 이름: 'System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'    위치: MongoDB.Driver.Core.Connections.ClientDocumentHelper.CreateOSDocument()    위치: System.Lazy`1.CreateValue()    위치: System.Lazy`1.LazyInitValue()    위치: MongoDB.Driver.Core.Connections.ClientDocumentHelper.CreateClientDocument(String applicationName)    위치: MongoDB.Driver.Core.Connections.ConnectionInitializer..ctor(String applicationName, IReadOnl...