当前位置:实例文章 » 其他实例» [文章]2024考研408-操作系统 第三章-内存管理 学习笔记

2024考研408-操作系统 第三章-内存管理 学习笔记

发布人:shili8 发布时间:2025-01-05 18:35 阅读次数:0

**第三章 内存管理**

---

###3.1 概述内存管理是操作系统中一个非常重要的组成部分,它负责管理计算机的内存资源,确保程序能够有效地使用内存。内存管理包括内存分配、内存保护和内存回收等功能。

###3.2 内存分配内存分配是指将物理内存划分为多个块,并将这些块分配给进程或线程使用的过程。在内存分配中,我们需要考虑以下几个问题:

* **内存块大小**:内存块大小决定了程序能够分配多少个内存块。
* **内存块数量**:内存块数量决定了程序能够分配多少个内存块。
* **内存碎片**:当程序释放内存时,可能会产生内存碎片,这些碎片不能被重新利用。

####3.2.1 首次适应算法首先适应算法是一种简单的分配策略,它将每个进程或线程分配到一个连续的内存块中。这种算法的优点是简单易懂,但其缺点是可能会产生大量的内存碎片。

c// 首次适应算法示例代码#include <stdio.h>

#define MAX_MEMORY1000 // 最大内存大小int memory[MAX_MEMORY / sizeof(int)]; // 内存块数组void allocate_memory(int size) {
 int i;
 for (i =0; i < MAX_MEMORY - size +1; i++) {
 if (memory[i] ==0) {
 break;
 }
 }

 if (i >= MAX_MEMORY - size +1) {
 printf("内存不足
");
 return;
 }

 for (; i < i + size; i++) {
 memory[i] =1;
 }
}

int main() {
 allocate_memory(10);
 return0;
}


####3.2.2 最佳适应算法最佳适应算法是一种更为复杂的分配策略,它将每个进程或线程分配到一个最小的内存块中。这种算法的优点是能够最大限度地减少内存碎片,但其缺点是可能会产生较多的内存请求。

c// 最佳适应算法示例代码#include <stdio.h>

#define MAX_MEMORY1000 // 最大内存大小int memory[MAX_MEMORY / sizeof(int)]; // 内存块数组void allocate_memory(int size) {
 int i;
 for (i =0; i < MAX_MEMORY - size +1; i++) {
 if (memory[i] ==0 && i >= size) {
 break;
 }
 }

 if (i >= MAX_MEMORY - size +1) {
 printf("内存不足
");
 return;
 }

 for (; i < i + size; i++) {
 memory[i] =1;
 }
}

int main() {
 allocate_memory(10);
 return0;
}


###3.3 内存保护内存保护是指在程序执行过程中,防止程序访问不允许的内存区域。内存保护包括以下几个方面:

* **页表**:页表是一种用于管理内存块的数据结构,它能够将虚拟地址映射到物理地址。
* **权限控制**:权限控制是指在程序执行过程中,检查程序是否有权访问某个内存区域。

####3.3.1页表示例代码
c//页表示例代码#include <stdio.h>

#define MAX_MEMORY1000 // 最大内存大小int memory[MAX_MEMORY / sizeof(int)]; // 内存块数组int page_table[256]; //页表数组void initialize_page_table() {
 int i;
 for (i =0; i < 256; i++) {
 page_table[i] = -1;
 }
}

void map_virtual_address_to_physical_address(int virtual_address, int physical_address) {
 if (page_table[virtual_address / sizeof(int)] == -1) {
 page_table[virtual_address / sizeof(int)] = physical_address;
 } else {
 printf("虚拟地址已映射
");
 }
}

int main() {
 initialize_page_table();
 map_virtual_address_to_physical_address(10,100);
 return0;
}


####3.3.2 权限控制示例代码
c// 权限控制示例代码#include <stdio.h>

#define MAX_MEMORY1000 // 最大内存大小int memory[MAX_MEMORY / sizeof(int)]; // 内存块数组int permission_table[256]; // 权限表数组void initialize_permission_table() {
 int i;
 for (i =0; i < 256; i++) {
 permission_table[i] =0;
 }
}

void set_permission(int virtual_address, int permission) {
 if (permission ==1 || permission ==2) {
 permission_table[virtual_address / sizeof(int)] = permission;
 } else {
 printf("权限不合法
");
 }
}

int main() {
 initialize_permission_table();
 set_permission(10,1);
 return0;
}


###3.4 内存回收内存回收是指在程序执行过程中,释放不再使用的内存块。内存回收包括以下几个方面:

* **内存碎片**:当程序释放内存时,可能会产生内存碎片,这些碎片不能被重新利用。
* **内存池**:内存池是一种用于管理内存块的数据结构,它能够将释放的内存块重新分配给其他进程或线程。

####3.4.1 内存回收示例代码
c// 内存回收示例代码#include <stdio.h>

#define MAX_MEMORY1000 // 最大内存大小int memory[MAX_MEMORY / sizeof(int)]; // 内存块数组int free_memory_pool[256]; // 内存池数组void initialize_free_memory_pool() {
 int i;
 for (i =0; i < 256; i++) {
 free_memory_pool[i] = -1;
 }
}

void allocate_memory_from_free_memory_pool(int size) {
 if (size <=10 && free_memory_pool[size] == -1) {
 free_memory_pool[size] =1;
 } else {
 printf("内存不足
");
 }
}

int main() {
 initialize_free_memory_pool();
 allocate_memory_from_free_memory_pool(5);
 return0;
}


### 总结本章主要介绍了内存管理的基本概念和原理,包括内存分配、内存保护和内存回收。通过学习这些内容,我们能够更好地理解操作系统中内存管理的重要性,并能够设计出高效的内存管理策略。

### 参考文献* [1] "操作系统" (第3 版).机械工业出版社.
* [2] "计算机组成与组织原理" (第5 版). 高等教育出版社.
* [3] "内存管理" (第1 版). 计算机科学出版社.

相关标签:学习笔记考研
其他信息

其他资源

Top