Linux 커널

====가상주소====

룸훼훼 2010. 9. 28. 09:23
반응형

● 가상주소

가상 메모리는 컴퓨터와 운영체계에 의해 구현되는 개념으로서 가상의 주소 공간을 할당하여  대단히 큰 용량의 메모리나 데이터 저장공간을 사용할 수 있도록 만든다.

또 한 가상 메모리 기법으로 제공되는 주소공간으로서, 프로세스의 관점에서 사용하는 주소이다.오늘날 대부분의 운영체제에는 가상 메모리 기법이 적용되어 있다. 가상메모리에서의 주소공간 즉 가상주소 공간은 프로세스가 참조할 수 있는 주소들의 범위이며, 하나의 프로세스 당 하나의 가상주소 공간이 주어진다. 일반적으로 스레드는 프로세스 내의 주소 공간을 공유한다.
주소 공간의 크기는 주소버스
(Address Bus)의 크기에 따라 달라진다. 예를 들어 주소 버스가 32비트인 시스템에서 주소 공간의 크기는 232개의 서로 다른 주소에 대한 식별자를 만들 수 있으므로 0부터 232 − 1까지의 주소 범위를 가진다.





● MMU

메모리 관리 장치(Memory Management Unit)는 CPU메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어(CPU 내장) 장치이다. 가상 메모리 주소를 실제 메모리주소로 변환하며, 메모리 보호, 캐시 관리, 버스 중재 등의 역할을 담당한다.                                                                     

최신 아키텍처에서 MMU는 가상 주소공간을 2N비 트 크기의 페이지들로 나눈다. 그 가운데 일부 페이지는 실제 메모리 주소의 한 페이지에 대응되는데, 대부분의 경우 가상 주소공간은 실제 메모리의 주소공간보다 크기 때문에 모든 페이지가 실제 메모리에 대응되는 것은 아니다. CPU가 가상 메모리 주소를 MMU에 넘겨주면 MMU는 그 주소를 받아 뒤쪽의 N비트는 바꾸지 않고 앞쪽의 나머지 비트를 그에 해당하는 실제 메모리 주소로 바꾼다. 이때 가상 메모리 주소와 실제 메모리 주소 사이의 변환을 위해 MMU는 변환 참조 버퍼(Translation Lookaside Buffer, TLB)라는 고속의 보조기억장치를 참조한다. 이 보조기억장치에 원하는 변환 정보가 없을 때는 더 느린 다른 방법으로 페이지 변환 정보를 얻어오는데, 이 페이지 변환 정보가 담겨 있는 자료구조를 페이지 테이블(Page Table)이라 한다. 페이지 테이블의 동작은 아키텍처와 운영체제에 따라 서로 다르다.

TLB나 PTE는 또한 그 메모리 주소가 캐시에 저장되었는지, 페이지가 쓰여졌는지(dirty bit), 프로세스에게 메모리에 접근할 권한이 있는지 등의 정보를 저장하기도 한다.

TLB나 페이지 테이블이 실제 메모리 주소를 가져오지 못하는 경우가 있는데, 이를 페이지 실패(page fault)라 한다. 대부분의 경우 페이지 실패는 가상 주소공간의 페이지가 실제 메모리에 없기 때문에 발생한다. 이 경우 운영체제가 그 처리를 담당하는데, 비어 있는 메모리 공간에 페이지를 할당하거나, 비어 있는 메모리 공간이 없을 경우 실제 메모리의 한 페이지를 빼내 하드디스크에 저장하고 (이를 페이징이라 한다) 그 자리에 요구 받은 페이지를 할당한다.

페이지 실패는 메모리 보호의 목적으로도 사용될 수 있다. 어떤 프로그램이 접근이 금지된 주소공간에 접근하려 하면 MMU는 페이지 실패를 일으킨다. 이때 운영체제는 금지된 공간에 접근하려 하는 페이지 실패를 처리하지 않고 프로그램을 중지시킴으로써 악의가 있는 프로그램이나 버그가 있는 프로그램이 중요한 데이터를 읽거나 쓰는 것을 막을 수 있다.


디바이스 모듈

디바이스 드라이버 모듈을 사용하는 상태에서 제거를 해버리면 커널에 커다란 문제가 발생하기 때문에 커널은 디바이스 드라이버 횟수를감  시하고 사용하지 않을 때만 제거 할 수 있게 한다.

MOD_INC_USE_COUNT : 모듈 사용 횟수 증가
MOD_DEC_USE_COUNT : 모듈 사용 횟수 감소
MOD_IN_USE       : 모듈 사용 횟수가 0 이 아니면 참 값을 반환


▶ mknod - 디바이스 파일생성



mknod [디바이스 파일명] [파일형] [주번호] [부번호]


 

-m : 생성된 파일의 모드를 지정

-p : FIFO 타입 파일

-b : Block 타입 파일

-c : Character 타입 파일

-u : -c 와 동일

Block 타입 파일

블럭 장치는 블럭 형식으로 데이터를 옮기기 위한 장치로 하드디스크, CD-ROM 처럼 주소체계를 가지고 있어서 랜덤으로 접근 할수 있는 장치를 말한다. 이런 블럭 장치 에 대응 되는 파일이 Block 타입 파일이다.

Character 타입 파일

문자 장치는 한번에 하나의 문자를 전달하기 위한 장치로 Virtual Terminal, Serial Modem 과 같은 것이고 일반적으로 랜덤으로 접근이 불가능 하다. 이런 장치에 대응되는 파일이 Character 타입 파일이다.

major, minor

major minor 는 주번호 부번호로 둘다 0에서 부터 255까지 지정이 가능한데, 만약major 만 사용한다면 최대 256개의 장치만 사용가능하다. 그렇기에 비슷하거나 같은 장치는 주번호를 같이하고 부번호를 다르게 지정하여 사용한다.

/proc/partitions 를 참조해 현재 설치된 디바이스의 major , minor 번호를 알수 있다.

(b,c,u 옵션을 사용할 때는 반드시 major 와 minor 를 지정해야하며, FIFO 타입 파일을 제외하고는 모두 슈퍼유저만이 생성가능하다)



자세한 정보는    /usr/src/linux-2.4.18-4/Documentation/devices.txt

반응형

'Linux 커널' 카테고리의 다른 글

init - 커널 실행순서(안드로이드)  (0) 2011.02.14
tar 명령어  (0) 2011.02.11
makefile분석  (0) 2010.09.28
source insight 프로젝트 생성하기  (0) 2010.09.28
u-boot  (0) 2010.09.28