현생/리눅스 커널

세그먼트 셀렉터논리 주소를 선형 주소로 빠르게 변환하기 위해 인텔 프로세서는 여섯 개의 프로그래밍 가능한 세그먼테이션 레지스터 각각에 프로그래머가 설정할 수 없는 레지스터를 추가로 제공한다. 이 레지스터는 각각 자신과 연계된 세그먼테이션 레지스터에 들어 있는 세그먼트 셀렉터가 지정한 8바이트 크기의 세그먼트 디스크립터를 포함한다. 세그먼트 셀렉터를 세그먼테이션 레지스터로 로드할 때마다 해당 세그먼트 디스크립터를 메모리에서 대응하는 프로그래밍 불가능한 CPU 레지스터로 로드한다. 이때부터 이 세그먼트를 참조하는 논리 주소 변환은 주 메모리에 저장된 GDT나 LDT에 접근하지 않고도 수행할 수 있게 된다. 프로세서는 세그먼트 디스크립터를 포함한 CPU 레지스터를 직접 참조하면 된다.  GDT나 LDT에 직접..
실제 모드와 보호 모드이는 메모리 변환 방법의 종류로, 실제 모드는 예전 모델에서 사용한 보호 기능이 거의 없는 주소 변환 방법이다. 메모리 주소를 20비트로 계산하여 최대 1MB의 메모리를 접근할 수 있고 주소 변환 방식은 세그먼트:오프셋 방식이다. 즉, 세그먼트 레지스터와 오프셋을 조합하여 물리적 주소를 계산한다. 반면 보호모드는 인텔 마이크로프로세서 80386 모델부터 도입된 모드로, 32비트 주소 지정이 가능하며 최대 4GB 메모리에 접근 가능하다. 보호모드의 핵심은 메모리 보호와 멀티태스킹 지원이다. 아래 내용은 보호모드와 관련된 포스팅이다.  세그먼테이션 레지스터논리 주소는 세그먼트 식별자와 세그먼트 내 상대적인 주소를 나타내는 오프셋으로 이뤄진다. 세그먼트 식별자는 세그먼트 셀렉터라 하는 1..
논리 주소기계어 명령에서 피연산자의 주소나 명령어 주소를 지정할 때 사용한다. 논리 주소는 세그먼트와 세그먼트의 시작부터 실제 주소까지의 거리를 나타내는 오프셋으로 이루어진다. 즉, CPU의 프로그램 카운터(PC)나 명령어에서 직접 참조하는 주소로, CPU의 세그먼트 레지스터와 함께 형성된다. 프로그램이 직접 사용하는 주소이며, 물리 메모리 주소와는 다를 수 있다. CPU는 이 주소를 메모리 관리 장치(MMU)를 통해 변환한다. 논리 주소는 세그먼트 기법을 통해 선형 주소(가상 주소)로 변환된다.  선형 주소가상 주소라고도 불리는 선형 주소는 논리 주소가 세그먼트 기법을 통해 변환된 결과이다. 세그먼트란 페이지와 다르게 가변적인 크기의 논리적 블록을 뜻한다. 세그먼트 기법은 이러한 세그먼트로 메모리를 나..
가상 메모리가상 메모리는 응용프로그램에서 요구하는 메모리와 하드웨어 메모리 관리 유닛(MMU) 사이에 논리적인 계층으로 동작한다. 가상 메모리를 사용하면 여러 프로세스를 동시에 실행하고, 실제 물리 메모리보다 더 많은 메모리를 필요로 하는 프로그램을 실행할 수 있고, 프로그램 코드의 일부분만 메모리에 로드해도 프로세스를 실행할 수 있다.또 각 프로세스는 사용 간으한 물리 메모리의 부분 집합에 접근할 수 있고 프로그램의 단일 메모리 이미지를 공유할 수 있으며 재배치 가능하고 개발자가 물리 메모리 구조에 신경 쓸 필요가 없어진다. 프로세스가 참조할 수 있는 메모리 주소 집합은 물리 메모리 주소와 다른데, 프로세스가 가상 주소를 사용할 때 커널과 MMU가 협력하여 요구한 메모리 주소에서 실제 물리 위치를 찾는..
시그널유닉스의 시그널은 프로세스에 시스템 이벤트를 알려주는 매커니즘을 제공한다. 각 이벤트는 자신만의 시그널 번호를 가지고 있다. 시스템 이벤트는 두 종류가 있다. 비동기적 알림 : 외부 이벤트로 시그널이 발생하거나 인터럽트가 발생동기적인 에러나 예외 : divide by zero(SIGFPE)나 잘못된 메모리 접근(SIGSEGV)와 같은 특정 코드에서 발생 프로세스는 시그널을 무시하거나 비동기적으로 시그널 핸들러를 실행할 수 있다. 프로세스가 이를 지정하지 않으면 커널은 시그널 번호에 따라 기본 동작을 수행한다. 기본 동작은 프로세스를 종료하거나, 코어 덤프에 프로세스 상태를 저장하고 종료하거나, 시그널을 무시하거나, 프로세스를 보류하거나, 프로세스가 중단되어 있었다면 실행을 재개한다. SIGKILL과..
커널 모델과 프로세스CPU는 사용자 모드와 커널 모드 중 하나에서 동작한다. 비로 두 개 이상의 모드를 지원하는 CPU도 존재하지만, 표준 유닉스 커널은 커널 모드와 사용자 모드만 사용한다. CPU는 사용자 모드와 커널 모드 간 전환하는 명령어를 제공하고, 프로그램은 대부분의 시간을 사용자 모드에서 작동한다. 커널이란 프로세스의 관리자이다. 커널의 여러 루틴은 프로세스를 생성하고 제거하고 동기화한다. 프로세스가 시스템 콜을 통해 커널 서비스를 이용할 수 있도록 한다. 유닉스 시스템에서는 커널 스레드라 하는 몇 가지의 특권 프로세스가 있다. 이들은 커널 모드에서 실행되고, 사용자와 상호 작용하지 않으며, 시스템이 작동하는 동안 쭉 살아 있다.  커널 루틴이 호출되는 경우는 여러가지가 존재한다. 프로세스가 ..
파일 시스템사용자가 파일이나 디렉토리에 접근한다는 것은, 사용자는 하드웨어 장치의 데이터에 실제로 접근한다는 것이다. 파일 시스템은 사용자 수준에서 하드디스크 파티션의 물리적인 구조를 볼 수 있게 해준다. 사용자 모드에서 파일 시스템을 통해 파일을 다루고자 하면 실제 파일을 다루는 작업은 커널 모드에서 수행하게 된다. 이를 위해 유닉스 시스템에서는 여러 시스템 콜을 정의하였다.  파일 열기fd = open(path, flag, mode)프로세스는 열린 파일에만 접근할 수 있다. 파일을 열기 위해서, 프로세스는 위 시스템 콜을 호출한다. 세 매개변수는 각각 열 파일의 경로, 파일을 어떻게 열 것인지(읽기 쓰기 등), 새로 생성할 파일의 접근 권한을 의미한다.  이 시스템 콜은 open file 객체를 생성..
파일유닉스에서, 파일이란 일련의 바이트로 이뤄진 무언가이다. 즉, 커널은 파일의 내용을 신경쓰지 않는다. 사용자 관점에서, 파일은 트리 구조로 이루어진 이름 공간으로 조직화된다. 루트 /를 기반으로, /와 널문자인 \0을 제외한 일련의 아스키 문자로 파일 및 디렉토리 명이 구성된다. 같은 디렉토리에서는 이름이 서로 달라야 하지만, 다른 디렉토리에서는 같은 이름을 사용해도 된다. 유닉스에서 각 프로세스는 현재 작업 디렉토리와 연계되어 있다. 이 것은 픟로세스의 실행 컨텍스트에 속하고, 프로세스가 현재 사용하는 디렉토리를 가리키게 된다. 경로명은 슬래시 / 로 시작하면 그 경로명은 시작 지점이 루트 디렉토리기 때문에 절대 경로라 한다. 그렇지 않다면 상대 경로이다. 파일명을 지정할 때, . 이나 ..을 사용..
푸더기
'현생/리눅스 커널' 카테고리의 글 목록