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 版). 计算机科学出版社.