>  기사  >  운영 및 유지보수  >  리눅스 운영체제의 기본 원리

리눅스 운영체제의 기본 원리

小云云
小云云원래의
2018-01-13 13:17:512341검색

이 기사는 주로 Linux 운영 체제의 원리에 대해 설명합니다. Linux 시스템에 대한 매우 훌륭한 기본 튜토리얼입니다. 관련 내용을 모두 요약했습니다. 함께 공부해 봅시다. 그것이 모두에게 도움이 되기를 바랍니다.

Linux 운영체제 원리 텍스트 버전

1. 컴퓨터의 4대 시대

1. 1세대:

진공관 컴퓨터, 입출력: 천공카드, 컴퓨터 조작이 매우 불편하지만 가능 한 가지 일을 함께 완료하려면 12명 이상의 사람이 필요하며, 연도는 아마도 1945-1955년일 것입니다. 그리고 그때 집에 컴퓨터가 있었다면 컴퓨터를 켜자마자 전구 밝기가 어두워질 수도 있겠네요 ㅎㅎ~

2세대:

트랜지스터 컴퓨터, 일괄 처리(직렬 모드 작동) 시스템이 나타납니다. 첫 번째 것보다 훨씬 더 많은 전력을 절약합니다. 대표적인 대표자는 메인프레임이다. 대략적인 연도: 1955-1965. 그때: 포트란 언어가 탄생했어요~아주 오래된 컴퓨터 언어죠.

3. 3세대:

집적 회로의 출현과 다중 채널 처리 프로그램의 설계(병렬 모드로 실행) 전형적인 대표자는 시간 공유 시스템(CPU 작업을 시간 조각으로 나누는 것)입니다. 연도는 아마도 1965-1980년경일 것입니다.

4. 4세대:

PC가 등장한 시기는 아마도 1980년경일 것입니다. 저는 이 시대의 대표적인 인물을 믿습니다. 바로 빌 게이츠, 스티브 잡스입니다.

2. 컴퓨터 작업 시스템

4개의 시대를 거쳐 컴퓨터가 발전했지만, 오늘날에도 컴퓨터 작업 시스템은 비교적 단순합니다. 일반적으로 컴퓨터에는 다섯 가지 기본 구성 요소가 있습니다.

1.MMU(메모리 페이징[메모리 페이지] 구현)

컴퓨팅 메커니즘은 CPU(컴퓨팅 제어 장치)와 독립적입니다. CPU에는 MMU라는 고유한 칩이 있습니다. 스레드 주소와 프로세스의 물리적 주소 간의 대응 관계를 계산하는 데 사용됩니다. 또한 액세스 보호에도 사용됩니다. 즉, 프로세스가 자신의 것이 아닌 메모리 주소에 처음 액세스하면 거부됩니다!

2. 메모리(memory)

3. 디스플레이 장치(VGA 인터페이스, 모니터 등) [IO 장치에 속함]

4. 입력 장치(키보드, 키보드 장치) [IO 장치에 속함]

5 하드 디스크 장치(하드 접시 제어, 하드 디스크 컨트롤러 또는 어댑터) [IO 장치에 속함]

확장 지식:

         

이러한 하드웨어 장치는 버스에 연결되어 있으며 이 라인을 통해 데이터를 교환합니다. 내부는 CPU이며 가장 높은 명령 권한을 가지고 있습니다. 그럼 어떻게 작동하나요?

A. 명령 단위(메모리에서 명령 가져오기);

B. 디코딩 단위(메모리에서 가져온 데이터를 CPU가 실제로 실행할 수 있는 명령으로 변환)

C. 지침의 요구 사항에 따라 작동하도록 다른 하드웨어를 호출합니다)

위에서 MMU가 CPU의 일부라는 것을 알고 있지만 CPU에 다른 구성 요소가 필요합니까? 물론 명령어 레지스터 칩, 명령어 카운터 칩, 스택 포인터 등이 있습니다.

명령어 레지스터 칩: CPU가 데이터를 꺼내어 메모리에 저장하는 곳입니다.

명령어 카운터 칩: CPU가 메모리에서 데이터를 가져온 마지막 위치를 기록하는 곳입니다. 다음에 쉽게 검색할 수 있습니다.

스택 포인터: CPU가 명령어를 가져올 때마다 스택 포인터가 메모리의 다음 명령어 위치를 가리킵니다.

작업 주기는 CPU만큼 빠르고 CPU의 작업 주파수는 클럭 주기와 동일하므로 성능이 매우 좋으며 CPU 내부 버스에서 데이터 통신이 완료됩니다. 명령어 레지스터 칩, 명령어 카운터 칩, 스택 포인터. 이러한 장치를 일반적으로 CPU 레지스터라고 합니다.

레지스터는 실제로 장면을 저장하는 데 사용됩니다. 이는 특히 시간 다중화에서 분명하게 나타납니다. 예를 들어, CPU가 여러 프로그램에 의해 공유될 때 CPU는 종종 프로세스를 종료하거나 일시 중지하며 운영 체제는 현재 실행 상태를 저장해야 합니다(CPU가 나중에 다시 돌아올 때 계속 처리할 수 있도록). . ) 그런 다음 다른 프로세스를 계속 실행합니다(이를 컴퓨터의 컨텍스트 전환이라고 합니다).

3. 컴퓨터 보관 시스템.

1. 대칭형 다중 프로세서 SMP

MMU 및 레지스터(CPU의 작업 주기에 가깝습니다) 외에도 데이터 처리에 특화된 CPU 코어가 있습니다. 코드를 병렬로 실행하는 데 사용됩니다. 업계의 많은 기업에서는 다중 CPU를 사용합니다. 이러한 구조를 대칭형 멀티프로세서라고 합니다.

2. 프로그램 지역성의 원리

공간 지역성:

프로그램은 명령어와 데이터로 구성됩니다. 공간적 지역성은 하나의 데이터에 액세스한 후 해당 데이터와 매우 가까운 다른 데이터에도 계속 액세스할 수 있음을 의미합니다.

시간적 지역성:

일반적으로 프로그램 실행이 완료되면 곧 액세스될 수 있습니다. 데이터에도 동일한 원칙이 적용됩니다. 일단 데이터에 액세스하면 다시 액세스될 가능성이 높습니다.

공간적 지역성 관점에서 보든 시간적 지역성 관점에서 보든 일반적으로 데이터를 캐시해야 하는 것은 바로 프로그램 지역성의 존재 때문입니다.

확장된 지식:

CPU 내부의 레지스터 저장 공간은 제한되어 있기 때문에 데이터를 저장하기 위해 메모리를 사용합니다. 그러나 CPU의 속도와 메모리의 속도는 전혀 같은 수준이 아니므로, 데이터를 처리할 때 대부분은 대기 중입니다(CPU는 메모리에서 데이터 조각을 가져와야 하며 CPU의 한 회전으로 처리할 수 있지만 메모리는 20번 회전해야 할 수도 있음). 효율성을 높이기 위해 캐싱이라는 개념이 등장했습니다.

이제 우리는 프로그램의 지역성의 원리를 알았으므로 더 많은 공간을 확보하기 위해 CPU가 실제로 공간을 교환하는 데 시간을 사용하지만 캐시는 CPU가 직접 데이터를 가져오도록 하여 시간을 절약할 수 있다는 것도 알고 있습니다. 캐시가 사용됩니다. 공간은 시간으로 교환됩니다

3. 스토리지 시스템에 포함되어 있어도

            

오랜 시간 일했던 친구들은 테이프 드라이브를 본 적이 있을 지 모르지만 이제는 기본적으로 OUT입니다. 기업에서는 테이프 드라이브를 대체하기 위해 하드 디스크를 사용하는데, 우리가 가장 익숙한 가정용 컴퓨터의 구조를 살펴보겠습니다. 거기에 저장된 데이터는 마지막으로 저장되었을 때와 다릅니다. 간단한 예를 들 수 있습니다. 주간 보관 주기 사이에는 큰 차이가 있습니다. 특히 눈에 띄는 것은 기계식 하드 드라이브와 메모리 사이의 격차가 상당히 크다는 점이다.

확장된 지식:

집에 있는 데스크탑이나 노트북과 비교해 직접 분해하고 기계식 하드 드라이브, 솔리드 스테이트 드라이브 또는 메모리 등에 대해 이야기했을 수도 있습니다. 하지만 캐시의 물리적 장치를 보지 못했을 수도 있지만 실제로는 CPU에 있습니다. 그러므로 우리가 그것을 이해하는 데에는 맹점이 있을 수 있습니다.

먼저 1단계 캐시와 헤드셋 캐시에 대해 이야기해 보겠습니다. CPU가 여기에서 데이터를 가져오는 데 걸리는 시간은 기본적으로 그리 길지 않습니다. 1단계 캐시와 2단계 캐시 모두 내부 리소스이기 때문입니다. CPU 코어. (동일한 하드웨어 조건에서 128k L1 캐시의 시장 가격은 약 300위안, 256k L1 캐시의 시장 가격은 약 600위안, 512k L1 캐시의 시장 가격은 네 자리 수를 넘을 수 있습니다. 구체적인 가격은 JD.com에 문의하세요. 이는 캐시 비용이 매우 높다는 것을 보여주기에 충분합니다!) 이때 3급 캐시는 어떻습니까? 실제로 세 번째 수준 캐시는 여러 CPU가 공유하는 공간입니다. 물론 여러 CPU가 메모리를 공유하기도 합니다.

             

4. NUMA(Non-Uniform Memory Access)

여러 CPU가 L3 캐시나 메모리를 공유하면 문제, 즉 리소스 몰수 문제가 발생한다는 것을 알고 있습니다. 우리는 변수나 문자열이 메모리에 저장될 때 메모리 주소를 가지고 있다는 것을 알고 있습니다. 메모리 주소는 어떻게 얻나요? 아래 그림을 참조할 수 있습니다.

예, 이러한 하드웨어 전문가는 3단계 캐시를 나누어 서로 다른 CPU가 서로 다른 메모리 주소를 차지하도록 했습니다. 이를 통해 우리는 모두 자체적인 3단계 캐시를 가지고 있음을 이해할 수 있습니다. 영역에서는 리소스 확보에 문제가 없지만 여전히 동일한 3단계 캐시라는 점에 유의해야 합니다. 베이징에 조양구, 펑타이구, 다싱구, 하이뎬구 등이 있는 것처럼 모두 베이징에 속합니다. 우리는 여기서 이해할 수 있습니다. 이것이 NUMA이며 그 특징은 다음과 같습니다. 불균일한 메모리 액세스, 각각 고유한 메모리 공간이 있습니다.

확장 지식:

그럼 문제는 reload 결과에 따르면, cpu1이 실행하던 프로세스가 정지되면 그 주소가 자신의 캐시 주소에 기록되는데, cpu2가 프로그램을 다시 실행하면 어떻게 처리되는지 입니다. CPU2에 의해 획득됩니까?

CPU1의 3차 러프닝 영역에서 주소를 복사하거나 CPU2로 옮겨 처리하는 수밖에 없습니다. 따라서 재조정으로 인해 CPU 성능이 저하됩니다. 이때 프로세스 바인딩을 사용하여 이를 달성할 수 있으므로 프로세스가 다시 처리될 때 이를 처리하는 데 사용된 CPU가 계속 사용됩니다. 즉, 프로세스의 CPU 선호도입니다.

5. 캐시의 연속 쓰기 및 후기입 메커니즘.

  

CPU가 데이터를 처리하는 곳은 레지스터에서 수정하는 곳이다. 레지스터에 찾고 있는 데이터가 없으면 1단계 캐시로 가서 찾는다. 첫 번째 수준 캐시에 데이터가 없으면 두 번째 수준 캐시로 이동하여 디스크에서 찾을 때까지 차례로 검색한 다음 레지스터에 로드합니다. 세 번째 수준 캐시가 메모리에서 데이터를 가져오고 세 번째 수준 캐시가 부족하다는 사실을 발견하면 자동으로 세 번째 수준 캐시의 공간을 비웁니다.

우리는 데이터가 저장되는 최종 위치가 하드 디스크라는 것을 알고 있으며, 이 액세스 프로세스는 운영 체제에 의해 완료됩니다. CPU는 데이터를 처리할 때 연속 기입(메모리에 쓰기)과 후기입(첫 번째 수준 캐시에 쓰기)이라는 두 가지 쓰기 방법을 통해 여러 위치에 데이터를 씁니다. 분명히 write-back 성능은 좋지만, 전원이 꺼지면 당황스러울 것이고, 데이터는 1차 캐시에 직접 기록되지만 다른 CPU가 1차 캐시에 접근할 수 없기 때문에 데이터가 손실될 것입니다. , 그래서 신뢰성의 관점에서 볼 때 글쓰기의 관점에서는 일반적인 글쓰기 방식이 더 신뢰성이 있을 것입니다. 어떤 방법을 사용할지는 필요에 따라 다릅니다.

IV.IO 장치

1. IO 장치는 장치 컨트롤러와 장치 자체로 구성됩니다.

장치 컨트롤러: 마더보드에 통합된 칩 또는 칩 세트입니다. 운영 체제로부터 명령을 수신하고 명령 실행을 완료하는 역할을 담당합니다. 예를 들어 운영 체제에서 데이터를 읽는 역할을 담당합니다.

장치 자체: 자체 인터페이스가 있지만 장치 자체의 인터페이스는 사용할 수 없으며 단지 물리적 인터페이스일 뿐입니다. IDE 인터페이스와 같은 것입니다.

확장된 지식:

각 컨트롤러에는 통신을 위한 소수의 레지스터(몇 개에서 수십 개까지)가 있습니다. 이 레지스터는 장치 컨트롤러에 직접 통합됩니다. 예를 들어 최소 디스크 컨트롤러는 디스크 주소, 섹터 수, 읽기 및 쓰기 방향, 기타 관련 작업 요청에 대한 레지스터를 지정하는 데에도 사용됩니다. 따라서 컨트롤러를 활성화하고 싶을 때마다 장치 드라이버는 운영 체제로부터 작업 명령을 받은 다음 이를 해당 장치의 기본 작업으로 변환하고 작업 요청을 레지스터에 배치하여 작업을 완료합니다. 각 레지스터는 IO 포트로 작동합니다. 모든 레지스터 조합을 장치의 I/O 주소 공간, I/O 포트 공간이라고도 합니다.

2. 드라이버

실제 하드웨어 작업은 드라이버 작업으로 완료됩니다. 드라이버는 일반적으로 장치 제조업체에서 완료해야 합니다. 일반적으로 드라이버는 커널에 위치합니다. 비록 드라이버가 커널 외부에서 실행될 수 있지만 너무 비효율적이기 때문에 이를 수행하는 사람은 거의 없습니다.

3. 입력 및 출력 구현

기기의 I/O 포트는 각 마더보드의 모델이 일치하지 않기 때문에 미리 할당할 수 없으므로 동적으로 할당해야 합니다. 컴퓨터가 켜지면 각 IO 장치는 버스의 I/O 포트 공간에 I/O 포트를 등록하여 사용해야 합니다. 이 동적 포트는 장치의 I/O 주소 공간에 결합된 모든 레지스터로 구성됩니다. 2^16 포트, 즉 65535 포트가 있습니다.

위 그림과 같이 우리 CPU가 특정 장치를 처리하려면 명령을 드라이버에 전달해야 하며, 드라이버는 CPU 명령을 장치가 이해할 수 있는 신호로 변환하여 입력합니다. 레지스터(소켓이라고도 함)에 저장됩니다. 따라서 레지스터(I/O 포트)는 CPU가 버스를 통해 장치와 상호 작용하는 주소(I/O 포트)입니다.

확장 지식:

I/O 장치의 입력과 출력을 구현하는 세 가지 방법:

A.. 폴링:

보통 시스템 호출을 시작하는 사용자 프로그램을 나타내며 커널은 이를 해당하는 커널로 변환합니다. 드라이버의 프로시저가 호출되고 장치 드라이버는 I/O를 시작하고 연속 루프에서 장치를 검사하여 장치가 작업을 완료했는지 확인합니다. 이는 바쁜 대기와 다소 유사합니다(즉, CPU는 고정된 기간을 사용하여 순회를 통해 각 I/O 장치를 지속적으로 확인하여 데이터가 있는지 확인합니다. 분명히 이 효율성은 이상적이지 않습니다.),

B.. 인터럽트 :

CPU에서 처리 중인 프로그램을 중단하고 CPU에서 수행 중인 작업을 중단하여 인터럽트 요청을 얻도록 커널에 알립니다. 일반적으로 마더보드에는 프로그래밍 가능 인터럽트 컨트롤러라고 하는 고유한 장치가 있습니다. 이 인터럽트 컨트롤러는 특정 핀을 통해 CPU와 직접 통신할 수 있으며, CPU가 특정 위치로 편향되도록 트리거하여 특정 신호가 도착했음을 CPU에 알릴 수 있습니다. 인터럽트 컨트롤러에는 인터럽트 벡터가 있습니다(각 I/O 장치가 시작될 때 인터럽트 컨트롤러가 인터럽트 번호를 등록하기를 원합니다. 이 번호는 일반적으로 고유합니다. 일반적으로 인터럽트 벡터의 각 핀은 여러 개의 인터럽트를 식별할 수 있습니다) 번호), 인터럽트 번호라고도 합니다.

따라서 이 장치에서 실제로 인터럽트가 발생하면 이 장치는 버스에 직접 데이터를 넣지 않습니다. 이 장치는 즉시 인터럽트 컨트롤러에 인터럽트 요청을 보냅니다. 인터럽트 컨트롤러는 인터럽트 벡터를 사용하여 요청이 어떤 장치인지 식별합니다. 그런 다음 CPU에 어떤 장치 인터럽트 요청이 도착했는지 알리기 위해 어떤 방식으로든 CPU에 알립니다. 이때 CPU는 장치 등록에 따라 I/O 포트 번호를 이용하여 장치 데이터를 얻을 수 있습니다. (CPU는 인터럽트 신호만 수신하기 때문에 데이터를 직접 가져올 수 없습니다. 커널에 알릴 수만 있고 커널이 CPU 자체에서 실행되도록 하고 커널이 인터럽트 요청을 얻습니다.) 예를 들어, 네트워크 카드는 외부 IP로부터의 요청의 경우, 네트워크 카드에도 자체 캐시 영역이 있습니다. CPU는 네트워크 카드의 캐시를 메모리로 가져와서 먼저 자신의 IP인지 확인하고 압축을 풀기 시작합니다. 그런 다음 CPIU는 자체 인터럽트 컨트롤러에서 이 포트를 찾아 그에 따라 처리합니다.

커널 인터럽트 처리는 인터럽트의 전반부(즉시 처리됨)와 인터럽트의 후반부(반드시 그런 것은 아님)의 두 단계로 나뉩니다. 네트워크 카드에서 데이터를 수신하는 경우를 예로 들어보겠습니다. 사용자 요청이 네트워크 카드에 도달하면 CPU는 네트워크 카드 캐시 영역의 데이터를 메모리로 직접 가져오도록 명령합니다. 이를 수신한 후 즉시 처리합니다. (여기서의 처리는 네트워크 카드에서 메모리로 데이터를 전송하는 것입니다.) 이를 인터럽트의 상위 부분이라고 합니다. 실제로 요청을 처리하는 두 번째 부분은

C.DMA라고 합니다.

직접 메모리 액세스, 데이터 전송이 버스에서 구현된다는 것은 누구나 알고 있습니다. CPU는 버스를 사용하는 I/O 장치입니다. 특정 시간의 버스는 CPU 컨트롤러에 의해 결정됩니다. 버스에는 주소 버스(장치의 주소 지정 기능 완료), 제어 버스(버스를 사용하여 각 장치 주소의 기능 제어) 및 데이터 버스(데이터 전송 실현)의 세 가지 기능이 있습니다.

일반적으로 I/O 장치와 함께 제공되는 지능형 제어 칩입니다(직접 메모리 액세스 컨트롤러라고 함). 인터럽트의 전반부를 처리해야 할 때 CPU는 DMA 장치에 이를 알립니다. 버스는 DMA로 돌아갈 것입니다. 장치는 I/O 장치의 데이터를 메모리 공간으로 읽는 데 사용할 수 있는 메모리 공간을 사용하고 이를 알려줍니다. DMA I/O 장치는 데이터 읽기를 완료하면 읽기 작업이 완료되었음을 CPU에 알리는 메시지를 보냅니다. 이때 CPU는 데이터가 로드되었음을 커널에 알립니다. 인터럽트의 후반부는 커널로 전달됩니다. 이제 대부분의 장치는 네트워크 카드, 하드 드라이브 등과 같은 DMA 컨트롤러를 사용합니다.

5. 운영 체제 개념

위의 연구를 통해 우리는 컴퓨터에 다섯 가지 기본 구성 요소가 있음을 알 수 있습니다. 운영 체제는 주로 이 다섯 가지 구성 요소를 상대적으로 직관적인 인터페이스로 추상화하여 상위 프로그래머나 사용자가 직접 사용합니다. 그렇다면 운영 체제에서 실제로 추상화되는 것들은 무엇일까요?

1.CPU(타임슬라이스)

운영체제에서는 CPU를 타임슬라이스로 추상화한 후, 프로그램을 프로세스로 추상화하고, 타임슬라이스를 할당하여 프로그램을 실행한다. CPU에는 변수가 메모리에 저장되는 집합 메모리 주소를 식별하는 주소 지정 단위가 있습니다.

    

호스트의 내부 버스는 CPU의 비트 폭(워드 길이라고도 함)에 따라 다릅니다. 예를 들어 32비트 주소 버스는 10진수 표기법으로 변환하면 2의 32번째 전원 메모리 주소를 나타낼 수 있습니다. , 4G 메모리 공간인데, 이때 왜 32비트 운영체제가 4G 메모리만 인식할 수 있는지 이해해야겠죠? 실제 메모리가 16G이더라도 사용 가능한 메모리는 여전히 4G입니다. 따라서 운영 체제가 4G 이상의 메모리 주소를 인식할 수 있다면 운영 체제는 32비트가 아니어야 합니다.

2. 메모리

운영 체제에서 메모리는 가상 주소 공간을 통해 구현됩니다.

3. I/O 장치

운영 체제에서 핵심 I/O 장치는 디스크가 저장 공간을 제공하고 커널에서 파일로 추상화된다는 것은 누구나 알고 있습니다.

4. 프로세스

솔직히 말하면 컴퓨터의 존재 목적은 단지 프로그램을 실행하는 것 아닌가요? 프로그램이 실행되면 이를 프로세스라고 부릅니다(당분간 스레드에 대해 걱정할 필요가 없습니다). 여러 프로세스가 동시에 실행되고 있다면 이러한 제한된 추상 리소스(CPU, 메모리 등)가 여러 프로세스에 할당된다는 의미입니다. 우리는 이러한 추상 자원을 집합적으로 자원 세트라고 부릅니다.

리소스 세트에는 다음이 포함됩니다:

1>.cpu 시간;

2>.메모리 주소: 가상 주소 공간으로 추상화됨(예: 32비트 운영 체제, 4G 공간 지원, 커널은 1G 공간을 차지함) 프로세스에는 기본적으로 3G도 있습니다. 실제로 컴퓨터의 메모리가 4G 미만일 수 있으므로 3G 공간이 없을 수 있습니다.)

3>.I/O: 모든 것은 fd(파일 설명자)를 통해 열리는 여러 파일입니다. , 파일 설명자) 지정된 파일을 엽니다. 파일을 일반 파일, 장치 파일, 파이프라인 파일의 세 가지 범주로 나눕니다.

각 프로세스에는 자체 작업 주소 구조, 즉 작업 구조가 있습니다. 각 프로세스마다 커널이 유지하는 데이터 구조입니다(데이터 구조는 데이터를 저장하는 데 사용됩니다. 직설적으로 말하면 프로세스와 해당 상위 프로세스가 소유한 리소스 세트를 기록하는 메모리 공간입니다. 장면을 저장합니다 [프로세스 전환에 사용], 메모리 매핑 대기). 작업 구조체는 선형 주소를 시뮬레이션하고 프로세스가 이러한 선형 주소를 사용할 수 있도록 허용하지만 선형 주소와 실제 메모리 주소 간의 매핑 관계를 기록합니다.

5. 메모리 매핑-페이지 프레임

커널이 사용하는 물리적 메모리 공간이 아닌 한, 우리는 이를 사용자 공간이라고 부릅니다. 커널은 사용자 공간의 물리적 메모리를 고정 크기 페이지 프레임(즉, 페이지 프레임)으로 자릅니다. 환주(Huanju) 말로는 고정 크기 저장 장치로 기본 단일 저장 장치보다 작습니다(기본값은 1바이트(8비트)는 일반적으로 4k당 하나의 저장 단위여야 합니다. 각 페이지 프레임은 독립적인 단위로 외부에 할당되며 각 페이지 프레임에도 고유한 번호가 있습니다. [예: 4G 공간을 사용할 수 있고 각 페이지 프레임이 4K이며 총 1M 페이지 프레임이 있다고 가정합니다. 】이 페이지 프레임은 다른 프로세스에 할당됩니다.

4G의 메모리가 있고 운영 체제가 1G를 차지하고 나머지 3G의 물리적 메모리가 사용자 공간에 할당되었다고 가정합니다. 각 프로세스가 시작된 후 사용 가능한 3G 공간이 있다고 생각하지만 실제로는 3G를 전혀 사용할 수 없습니다. 프로세스에 의해 작성된 메모리는 개별적으로 저장됩니다. 여유 메모리가 있는 곳이라면 어디든 접근하세요. 특정 액세스 알고리즘에 대해 묻지 마세요. 아직 연구하지 않았습니다.

프로세스 공간 구조:

1>. 예약된 공간

2>. 스택(가변 저장 위치)

3>. 공유 라이브러리

4>. ) )

5>. 데이터 세그먼트(전역 정적 변수 저장)

6>. 코드 세그먼트

프로세스와 메모리 간의 저장 관계는 다음과 같습니다.

각 프로세스 공간에는 예약된 공간이 있습니다. 특정 A 프로세스는 자신이 연 데이터가 더 이상 충분하지 않다는 것을 발견하고 새 파일을 열어야 합니다(새 파일을 열려면 프로세스의 주소 공간에 데이터를 저장해야 함). 분명히 위 그림의 프로세스 주소 공간은 선형입니다. 그리고 진정한 의미에서는 사실이 아닙니다. 프로세스가 실제로 메모리를 적용할 때 커널에 대한 시스템 호출을 시작해야 합니다. 커널은 물리적 메모리에서 물리적 공간을 찾아 프로세스에 사용할 수 있는 메모리 주소를 알려줍니다. 예를 들어, 프로세스가 힙에 있는 파일을 열려고 하면 운영 체제(커널)에서 메모리 공간을 신청해야 하며, 물리적 메모리가 허용하는 범위 내에서(즉, 요청된 메모리는 다음보다 작아야 합니다.) 여유 물리적 메모리), 커널은 이를 프로세스 메모리 주소에 할당합니다.

각 프로세스에는 자체 선형 주소가 있습니다. 이 주소는 운영 체제에 의해 가상화되며 실제로 존재하지 않습니다. 그림 "프로세스 및 메모리 저장"에 표시된 것처럼 이 가상 주소를 실제 물리적 메모리에 매핑해야 합니다. 관계", 프로세스 데이터의 최종 저장 위치는 여전히 메모리에 매핑됩니다. 이는 프로세스가 실행을 위해 CPU로 실행될 때 CPU에 자신의 선형 주소를 알려줍니다. 이때 CPU는 선형 주소를 직접 찾지 않습니다(선형 주소는 가상이고 실제로 존재하지 않기 때문입니다. 주소). 프로세스는 물리적 메모리 주소를 저장합니다.) 먼저 프로세스의 "작업 구조"를 찾고 페이지 테이블을 로드합니다(선형 주소와 물리적 메모리 간의 매핑 관계를 기록하며 각 해당 관계를 페이지 테이블 항목이라고 함). ] 프로세스가 소유한 선형 주소에 해당하는 실제 물리적 메모리 주소를 읽습니다.

확장 지식:

CPU가 프로세스의 주소에 액세스할 때 먼저 프로세스의 선형 주소를 얻습니다. 이 선형 주소를 자체 칩 MMU에 전달하여 실제 물리적 메모리 주소를 얻습니다. process 메모리 주소의 목적. 즉, 프로세스의 메모리 주소에 접근하려면 MMU 작업을 거쳐야 하기 때문에 효율성이 매우 낮습니다. 따라서 자주 액세스하는 데이터를 저장하기 위해 캐시를 도입하여 효율성을 높였습니다. MMU는 계산을 수행하고 처리를 위해 데이터를 직접 가져옵니다. TLB: 변환 백업 버퍼(캐시 페이지 테이블 쿼리 결과)

참고: 32비트 운영 체제에서 라인 주소는 다음과 같습니다. 물리적 메모리 매핑. 64비트 운영 체제에서는 정반대입니다!

6. 사용자 상태 및 커널 상태

운영 체제가 실행 중일 때 조정된 멀티태스킹을 달성하기 위해 운영 체제는 두 개의 세그먼트로 나뉘며, 그 중 하나는 하드웨어에 가깝고 커널이라는 특권 권한을 갖습니다. 공간, 프로세스는 공간의 사용자에서 실행됩니다. 따라서 애플리케이션이 권한 있는 명령어를 사용하거나 하드웨어 리소스에 액세스해야 하는 경우 시스템 호출이 필요합니다.

애플리케이션으로 개발되고 운영 체제 자체의 일부로 존재하지 않는 한, 우리는 이를 사용자 공간 프로그램이라고 부릅니다. 실행 상태를 사용자 모드라고 합니다.

커널(운영 체제라고 생각할 수 있음) 공간에서 실행해야 하는 프로그램을 커널 공간에서 실행 중이라고 하며, 실행되는 상태를 사용자 모드, 즉 코어 모드라고 합니다. 참고: 커널은 특정 작업을 완료할 책임이 없습니다. 권한 있는 작업을 수행하기 위해 커널 공간에서 사용할 수 있습니다.

모든 프로그램이 실제로 실행되려면 궁극적으로 커널에 대한 시스템 호출을 시작해야 합니다. 그렇지 않으면 일부 프로그램은 커널의 참여가 필요하지 않으며 애플리케이션으로 완료될 수 있습니다. 비유를 들어보겠습니다. 2의 32승 결과를 계산하려면 커널 상태에서 실행해야 합니까? 대답은 '아니요'입니다. 커널은 특정 작업을 완료하는 데 책임이 없다는 것을 알고 있습니다. 우리는 단지 작업 결과를 계산하기를 원하며 특권 모드를 호출할 필요가 없습니다. 따라서 값 계산에 대한 일부 코드를 작성하면 다음과 같은 작업이 필요합니다. 이 코드는 실행을 위해 CPU로 넘겨질 수 있습니다.

응용 프로그램이 사용자 프로그램의 기능 대신 커널의 기능을 호출해야 하는 경우 응용 프로그램은 권한 있는 작업을 수행해야 함을 알게 되며 응용 프로그램 자체에는 이러한 기능이 적용되지 않습니다. 커널을 실행하고 커널에 권한 작동을 완료하도록 요청합니다. 커널은 애플리케이션에 특권 명령어를 사용할 수 있는 권한이 있음을 발견합니다. 커널은 이러한 특권 명령어를 실행하고 실행 결과를 애플리케이션에 반환합니다. 그런 다음 애플리케이션은 특권 명령어의 실행 결과를 얻은 후 후속 코드를 계속합니다. 이것은 패러다임의 변화입니다.

그래서 프로그래머가 프로그램을 생산적으로 만들고 싶다면 코드가 사용자 공간에서 실행되도록 노력해야 합니다. 대부분의 코드가 커널 공간에서 실행되면 애플리케이션이 생산성을 너무 많이 제공하지 못할 것으로 추정됩니다. . 커널 공간이 생산성을 담당하지 않는다는 것을 알고 있기 때문입니다.

확장된 지식:

우리는 컴퓨터의 작업이 지정된 작업을 실행하는 것임을 알고 있습니다. 명령어는 특권 명령어 레벨과 비특권 명령어 레벨로 구분됩니다. 컴퓨터에 대해 아는 친구들은 X86의 CPU 아키텍처가 대략 4가지 레벨로 나누어져 있다는 것을 알 것입니다. 내부에서 외부까지 링 0, 링 1, 링 2, 링 3이라고 하는 4개의 링이 있습니다. 우리는 링 0의 명령어가 특권 명령어이고, 링 3의 명령어가 사용자 명령어라는 것을 알고 있습니다. 일반적으로 특권 명령어 수준은 하드웨어 작동, 버스 제어 등을 의미합니다.

프로그램을 실행하려면 커널의 조정이 필요하며, 사용자 모드와 커널 모드 간 전환이 가능하므로 프로그램 실행은 커널에 의해 실행되도록 CPU에 예약되어야 합니다. 일부 응용 프로그램은 기본 기능을 완료하기 위해 운영 체제가 작동하는 동안 실행되며 이를 데몬 프로세스라고 합니다. 하지만 일부 프로그램은 사용자가 필요할 때만 실행됩니다. 그렇다면 필요한 애플리케이션을 실행하도록 커널에 어떻게 알릴 수 있을까요? 이때 운영 체제를 처리하고 명령 실행을 시작할 수 있는 인터프리터가 필요합니다. 직설적으로 말하면, 사용자의 실행 요청이 커널에 제출될 수 있으며, 그러면 커널이 해당 작업에 필요한 기본 조건을 열 수 있다는 의미입니다. 그런 다음 프로그램이 실행됩니다.

관련 권장 사항:

운영 체제 지식의 스레드 이해

Linux 운영 체제에서 CPU 인터럽트

Linux 운영 체제의 보안 강화에 대한 예제 튜토리얼


위 내용은 리눅스 운영체제의 기본 원리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.