컴퓨터 지식 네트워크 - 컴퓨터 시스템 - 운영 체제의 메모리 편, 프로세스 실행의 기본 원칙

운영 체제의 메모리 편, 프로세스 실행의 기본 원칙

운영 체제의 메모리 편 (2)-프로세스 실행의 기본 원칙은 다음과 같습니다.

1, 명령

명령: CPU 가 인식할 수 있는 명령입니다. < P > 따라서 작성한 코드는 먼저 CPU 가 인식할 수 있는 명령으로 번역해야 합니다. 이 명령어들은 CPU 가 메모리 어느 주소로 데이터를 저장/가져와야 하는지, 이 데이터를 어떤 방식으로 처리해야 하는지 알려준다.

x=x+1 과 같은 3 개의 명령어로 컴파일되었으며 각 명령어의 첫 번째 바이너리를 "opcode:

명령어 1 (1,11,1111) 데이터 전송 명령어: 메모리라고 합니다

명령 2(111,11,1) 더하기 명령: 주소 11 의 레지스터에 있는 데이터에 1 을 더합니다. < P > 명령 3 (111,1111,11) 데이터 전송 명령: 주소 11 의 레지스터에 있는 데이터를 변수 X 가 저장된 주소로 전송합니다. < P > 이 예에서 명령어는 변수 X 의 실제 저장 주소 (물리적 주소) 를 직접 제공합니다. 그러나 실제로 기계 지시를 생성할 때 이 프로세스의 데이터가 어디에 배치될지 알 수 없다. 따라서 컴파일 생성 지시문에서는 일반적으로 논리 주소 (상대 주소) 를 사용합니다.

2, 논리 주소 대 물리적 주소 < P > 호텔을 예로 들어 호텔이 메모리이고 각 방이 스토리지 장치이고 각 스토리지 단위마다 주소가 있다고 가정해 보겠습니다. 이 주소는 실제 메모리의 주소인 물리적 주소입니다. < P > 그리고 현재 호텔 입구에 세 명의 학생이 서 있는데, 그들의 번호는 ,1,2 로, 그들은 번호별 오름차순으로 방에 입주할 것을 요구했다. 왜냐하면 그들은 아직 호텔에 실제로 입주하지 않았기 때문이다. 그렇다면 지금의 번호는 상대적 위치, 즉 메모리의 논리적 주소다. (알버트 아인슈타인, Northern Exposure (미국 TV 드라마), 호텔명언) < P > 그렇다면 번 학생이 5 번 방에 입주하면 나머지 두 학생의 방도 확정된다. 각각 6 번방과 7 번 방, 즉 논리 주소 중 하나의 물리적 주소가 확인되면 다른 논리 주소의 물리적 주소를 얻을 수 있다.

지침의 주소도 이런 생각을 할 수 있다. 컴파일 시 생성되는 지시문은' 상대 주소' 에만 신경을 쓰며 실제로 메모리에 넣을 때 시작 위치에 따라' 절대 주소' 를 얻을 수 있는 방법을 강구한다.

3, 프로그램 작성에서 프로그램 실행에 이르는 과정 < P > 이전 학습에서는 프로그램이 실행되기 전에 프로그램 및 데이터를 메모리에 로드해야 한다는 것을 알고 있습니다.

1, 편집: 프로그래머가 코드를 조작하여 소스 코드를 만들어야 합니다.

2, 컴파일: 컴파일러에서 소스 코드를 여러 대상 모듈로 컴파일합니다 (컴파일은 고급 언어를 기계 언어로 번역하는 것입니다).

3, 링크: 링크 프로그램이 컴파일한 후 형성된 대상 모듈 세트 및 필요한 라이브러리 함수를 연결하여 완전한 로드 모듈을 형성합니다.

4, 마운트: 로더가 메모리 지정 위치 (물리적 주소) 에 마운트 모듈을 마운트합니다. < P > 위 그림에서 알 수 있듯이 로드 프로세스는 먼저 논리 주소를 물리적 주소로 변환한 다음 프로그램 및 데이터를 메모리에 지정된 물리적 주소로 로드해야 합니다. 논리적 주소에서 물리적 주소로의 변환 방법에 따라 마운트를 세 가지 방법으로 나눕니다. 이 세 가지 마운트 방법 (논리적 주소가 물리적 주소로 전달되는 방법) 은 아래에 자세히 설명되어 있습니다.

4, 마운트의 세 가지 방법

4.1 절대 마운트

는 지시문의 주소가 항상 물리적 주소이기 때문에 논리적 주소를 물리적 주소로 변환할 필요가 없다는 가장 쉬운 방법입니다. < P > 는 컴파일 시 프로그램이 메모리에 배치될 위치를 이미 알고 있으며 컴파일러는 절대 주소 (물리적 주소) 의 대상 코드를 직접 생성합니다. 로더는 로드 모듈의 주소에 따라 프로그램 및 데이터를 메모리에 직접 로드합니다. < P > 특징: < P > 이 방법은 컴파일 시 프로그램이 메모리에 있는 위치를 알아야 하기 때문에 단일 프로그램 환경에만 적용됩니다. 단일 프로그램은 하나의 프로그램만 메모리에 액세스하며 서로 다른 프로그램이 동일한 메모리를 차지하지 않도록 하기 때문입니다.

4.2 정적 대상 변경

정적 대상 변경: 대상 변경 마운트라고도 합니다. 컴파일, 연결된 마운트 모듈의 주소는 모두 부터 시작하며, 지침에 사용된 주소, 데이터가 저장된 주소는 모두 시작 주소에 상대적인 논리 주소입니다. 현재 메모리 상태에 따라 장착 모듈을 메모리의 적절한 위치에 장착할 수 있습니다. 마운트할 때 주소를 "재배치" 하여 논리 주소를 물리적 주소로 변환합니다 (주소 변환은 로드 시 한 번에 수행됨).

특징:

정적 재배치는 작업이 메모리를 마운트할 때 필요한 모든 메모리 공간을 할당해야 하며 메모리가 부족하면 작업을 마운트할 수 없다는 특징이 있습니다. 작업이 메모리에 들어가면 실행 중에 더 이상 이동할 수 없으며 더 이상 메모리 공간을 요청할 수 없습니다.

4.3 동적 재배치

동적 재배치: 동적 런타임 마운트라고도 합니다. 컴파일되고 연결된 마운트 모듈의 주소는 모두 부터 시작합니다. 로더가 로드 모듈을 메모리에 로드한 후 논리 주소를 물리적 주소로 즉시 변환하지 않고 프로그램이 실제로 실행될 때까지 주소 변환을 연기합니다. = = 따라서 메모리가 마운트된 후에도 모든 주소는 논리 주소로 유지됩니다. 이 방법에는 재배치 레지스터의 지원이 필요합니다. < P > 간단히 말해서, 이 방법은 논리 주소를 물리적 주소로 변환하여 특정 프로그램 런타임까지 연기하는 것입니다. 즉, 지시문을 실행한 다음 실시간으로 논리 주소를 물리적 주소로 변환하는 것입니다. 특히 재배치 레지스터를 통해 수행됩니다. 재배치 레지스터는 메모리에 로드된 모듈의 시작 주소를 저장하며, 논리적 주소를 레지스터의 시작 주소에 더하면 실제 물리적 주소를 얻을 수 있습니다.

1, 동적 재배치를 사용할 때 프로그램이 메모리에서 이동할 수 있도록 합니다 (재배치 레지스터의 시작 위치만 수정하면 됨).

2, 불연속 스토리지에 프로그램 할당 가능 프로그램이 실행되기 전에 코드의 일부만 로드하면 실행에 들어갈 수 있으며, 프로그램 실행 중에 필요에 따라 메모리 할당을 동적으로 요청할 수 있습니다. 프로그램 세그먼트의 * * * 를 쉽게 즐길 수 있도록 사용자에게 스토리지 공간보다 훨씬 큰 주소 공간을 제공할 수 있습니다.

4.4 는

절대 로드 및 정적 재배치 마운트를 요약합니다. 한 번에 모든 프로그램을 지정된 메모리 위치에 마운트하고 후속 프로그램 위치를 변경할 수 없습니다. < P > 동적 재배치 로드 방법은 메모리의 일부를 로드할 수 있고, 메모리 내 프로그램 위치는 고정되지 않으며, 이동이 가능합니다 (재배치 레지스터의 시작 위치만 수정하면 됨).

5, 링크의 세 가지 방법 < P > 링크는 CPU 로 컴파일된 여러 시스템 코드 대상 모듈을 하나의 완전한 로드 모듈로 통합하는 것입니다. 링크 기간에 따라 세 가지 방법으로 나눕니다. < P > 보다 간단한 이해 링크는 자신의 코드에서 기존 Math 라이브러리의 max 함수를 호출하여 최대값을 구하는 것입니다. 그러면 코드는 Math 라이브러리에 의존하므로 프로그램을 Math 라이브러리의 프로그램과 연결 (통합) 해야 프로그램이 원활하게 실행될 수 있습니다.

5.1 정적 링크 < P > 프로그램이 실행되기 전에 각 대상 모듈과 해당 모듈에 필요한 라이브러리 함수를 전체 실행 파일 (모듈 로드) 에 연결한 후 더 이상 열지 않습니다.

5.2 로드 시 동적 링크

각 대상 모듈을 메모리에 로드할 때 측면 링크를 마운트하는 링크 방법 (모든 모듈을 한 번에 하나씩 로드).

5.3 런타임 동적 링크

프로그램 실행 중 대상 모듈이 필요할 때 대상 모듈을 연결합니다. 수정 및 업데이트를 용이하게 하고 목표 모듈에 대한 * * * 를 쉽게 즐길 수 있다는 장점이 있습니다.

上篇: 핸드폰이' 서비스 없음' 을 자주 표시하는 이유는 무엇입니까? 下篇: 핸드폰이 똥구덩이에 떨어지면 얼마나 썩을까?
관련 내용