操作系统简单动态分区分配算法(c++)

这篇具有很好参考价值的文章主要介绍了操作系统简单动态分区分配算法(c++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首次适应算法

首次适应算法找到一个可以分配的内存块就进行分配,下一次分配时还是从空闲分区链头开始找,该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区,这为以后到达的大作业分配大的内存空间创造了条件。

但是低址部分不断被划分,会留下许多难以利用的,很小的空闲分区(碎片)。而每次查找又都是从低址部分开始的,会增加查找可用空闲分区时的开销;

定义内存块,作业,分区链结构体。空闲分区用循环链表串起,正在运行的作业用数组记录,分配失败的作业用另一个数组记录。设置开始分配时起始指针(上一次分配的内存块的后一块),查找时使用的遍历指针,分区起始地址最小的链头指针,一个空闲分区的最小大小。

查找过程如果找到符合的分区,就分配给作业,将作业放入运行中数组;否则放入分配失败数组

回收过程查找运行作业数组,从链头开始对比分区起始地址加上大小后 与作业分配的起始地址的大小;

若小于则往后找分区;

若大于则判断作业起始地址加上分配的大小 与分区起始地址的关系,关系为等于则修改分区内容,否则将分配给作业的内存空间构造新分区插入空闲分区链合适位置;

若等于则判断作业起始地址加上分配的大小 与下一空闲分区起始地址的关系,若相等则修改当前分区并删除下一分区,不等则只修改分区

代码如下

#include<iostream>
#include <conio.h>
using namespace std;
struct block
{
	int address;      //内存块起始地址
	int size;		  //内存块大小
}BLOCK;    //内存块

struct job
{
	char id[10];				//作业id
	int address;	   //作业分配的内存起始地址
	int size;		   //作业需要的大小
	int alloc_size;	   //作业分配的大小
};     //作业

struct free_blocks_linklist
{
	block free_block;   //空闲内存块
	free_blocks_linklist* next;   //指向下一内存块的指针

}Free_Blocks_linklist;  //空闲分区链

job running_job[10];    //运行中的作业数组
int running_job_num = 0;
job waiting_job[10];   //分配失败后等待的作业数组
int waiting_jon_num = 0;
job finish_job[10];	   //完成的作业数组
int finish_job_num = 0;

free_blocks_linklist * header = nullptr;    //内存分区链头指针

void Init()
{
	header = new free_blocks_linklist;
	
	cout << "请输入内存大小(kB) :     ";
	cin >> header->free_block.size;
	cout << "请输入内存起始地址  :   ";
	cin >> header->free_block.address;
	header->next = header;
	
	
	/*cin >> hex >> a;
	cout << a << endl;
	cout << hex <<a;*/
}

bool alloc_memory(job &j)
{
	free_blocks_linklist* temp = header;
	if (temp == nullptr)
	{
		cout << "\n\n内存不足分配失败" << endl;
		return false;
	}
	while (1)
	{
		if (temp->free_block.size < j.size && temp->next != header)
			temp = temp->next;          //分区内存不够且后面还有分区

		else if (temp->free_block.size == j.size)   //分区内存正好
		
		{
			if (temp->next == temp)    //只剩一个分区
			{	
				j.address = temp->free_block.address;
				j.alloc_size = j.size;
				

				delete temp;
				header = nullptr;
				cout << "\n\n分配内存成功" << endl;
				return true;
			}
			else      //有多个分区
			{
				j.address = temp->free_block.address;
				j.alloc_size = j.size;
				

				temp = temp->next;
				
				delete temp;
				cout << "\n\n分配内存成功" << endl;
				return true;
				
			}
		}

		else if (temp->free_block.size > j.size)      //内存块分配后还有空间
		{
			j.address = temp->free_block.address;
			j.alloc_size = j.size;
			

			temp->free_block.size -= j.size;
			temp->free_block.address += j.size;
			
			cout << "\n\n分配内存成功" << endl;
			cout << "\n\n请按任意键继续" << endl;
			_getch();
			return true;
		}
		else
		{
			cout << "\n\n没有合适内存块分配" << endl;
			return false;
		}
	}
	
}

void run_job(job j)
{
	if (true == alloc_memory(j))     //分配成功
		running_job[running_job_num++] = j;
	else
		waiting_job[waiting_jon_num++] = j;
}

void show_message()
{	
	system("cls");
	free_blocks_linklist* temp = header;
	int i = 1;

	cout << "\n\n当前运行的作业数量为:" << running_job_num <<endl;
	cout << "正在等待分配内存的作业数量(分配内存失败)为:" << waiting_jon_num << endl;
	cout << "已完成作业数量为: " << finish_job_num << endl;
	cout << "\n当前内存空间信息如下 :  " << endl;
	if (header != nullptr)
	{
		do
		{
			cout << "\n内存块" << i << "起始地址为: " << temp->free_block.address << endl;
			cout << "内存块" << i << "大小为: " << temp->free_block.size << endl;
			temp = temp->next;
			i++;
		} while (temp != header);
	}
	else cout << "\n内存空间已经用完" << endl;


	cout << "\n\n请按任意键继续" << endl;
	_getch();
}

void input_job()
{
	job temp;
	cout << "请输入作业名: " << endl;
	cin >> temp.id;
	cout << "请输入作业大小: " << endl;
	cin >> temp.size;
	run_job(temp);
	show_message();
	return;
}

void release_memory(int count)    //count为要释放作业的序号
{
	if (header == nullptr)
	{
		header = new free_blocks_linklist;
		header->free_block.address = running_job[count].address;
		header->free_block.size = running_job[count].alloc_size;
		header->next = header;
		
	}
	else
	{
		free_blocks_linklist* temp = header;
		while (temp->next != header)
		{
			temp = temp->next;
		}              //找到链尾

		if (running_job[count].address == temp->free_block.address + temp->free_block.size)
		{		//作业分配的内存地址最大且可合并
			temp->free_block.size += running_job[count].alloc_size;
		}
		else if (running_job[count].address > temp->free_block.address + temp->free_block.size)
		{	//作业分配的内存地址最大且不可合并
			free_blocks_linklist* temp1 = new free_blocks_linklist;
			temp1->free_block.address = running_job[count].address;
			temp1->free_block.size = running_job[count].alloc_size;
			temp1->next = header;
			temp->next = temp1;
		}


		else if (header->free_block.address == running_job[count].address +   //作业分配的地址最小且可合并
			running_job[count].alloc_size)
		{
			header->free_block.address = running_job[count].address;
			header->free_block.size += running_job[count].alloc_size;
		}

		else if (header->free_block.address > running_job[count].address +  //作业分配的地址最小且不可合并
			running_job[count].alloc_size)
		{
			temp = new free_blocks_linklist;

			temp->free_block.address = running_job[count].address;
			temp->free_block.size = running_job[count].alloc_size;
			temp->next = header;

			free_blocks_linklist* temp1 = header;
			while (temp1->next != header)
				temp1 = temp1->next;
			temp1->next = temp;
			header = temp;

		}

		else                                           //作业回收的地址在分区链中间
		{
			temp = header;
			while (temp->next->free_block.address + temp->next->free_block.size < running_job[count].address)
				temp = temp->next;      //找到要插入的前一分区位置temp

			if (temp->free_block.address + temp->free_block.size == running_job[count].address)
			{	//前分区可以合并
				if (running_job[count].address + running_job[count].alloc_size == temp->next->free_block.address)
				{	//回收时可以和前后分区合并
					temp->free_block.size += running_job[count].alloc_size + temp->next->free_block.size;
					free_blocks_linklist* temp1 = temp->next;
					temp->next = temp1->next;
					delete temp1;
				}
				else    //只能与前分区合并
				{
					temp->free_block.size += running_job[count].alloc_size;
				}
			}
			else          //前分区不可合并
			{
				if (temp->next->free_block.address == running_job[count].address + running_job[count].alloc_size)
				{//后分区可以合并
					temp->next->free_block.address -= running_job[count].alloc_size;
					temp->next->free_block.size += running_job[count].alloc_size;
				}
				else
				{//后分区不可以合并
					free_blocks_linklist* temp1 = new free_blocks_linklist;
					temp1->free_block.address = running_job[count].address;
					temp1->free_block.size = running_job[count].alloc_size;
					temp1->next = temp->next;
					temp->next = temp1;

				}

			}

		}
	}

	finish_job[finish_job_num++] = running_job[count];
	running_job[count] = running_job[--running_job_num];
	cout << "释放内存成功" << endl;
	cout << "\n\n请按任意键继续" << endl;
	_getch();
}

void show_running_job()
{
	system("cls");
	int i = 0;
	cout << "当前正在运行的作业信息如下:\n" << endl;
	while (i < running_job_num)
	{
		cout << "序号:    " << i 
			<< "\t作业名: " << running_job[i].id 
			<< "\t大小:   " << running_job[i].size << endl;
		i++;
	}
	
	cout << "请输入要释放的作业序号 : ";
	cin >> i;

	if (i >= running_job_num || i < 0)
	{
		cout << "\n\n输入序号有误,请按任意键重新输入" << endl;
		show_running_job();
	}
	else
	{
		release_memory(i);
		show_message();
	}
}

void release_job()
{
	show_running_job();
}

void menu()
{
	char choice;
	while (1)
	{
		system("cls");
		cout << " 1: 输入作业" << endl;
		cout << " 2: 释放作业" << endl;
		cout << " 3: 离开" << endl;
		cout << "\n\n\n请输入选择: " << endl;
		choice = _getch();
		if (choice == '1')
			input_job();
		else if (choice == '2')
			release_job();
		else if (choice == '3')
			exit(0);
		else 
		{
			cout << "输入有误,请按任意键继续" << endl;
			_getch();
			}
	}
}

int main()
{
	Init();
	menu();
	return 0;
}

输入内存大小640kb,起始地址0

操作系统动态分配,算法,c++,数据结构

 作业1申请130KB后

操作系统动态分配,算法,c++,数据结构

 作业2申请60KB后

操作系统动态分配,算法,c++,数据结构 

作业3申请100KB后

操作系统动态分配,算法,c++,数据结构

作业2释放60KB后

操作系统动态分配,算法,c++,数据结构 

作业4申请200KB后

操作系统动态分配,算法,c++,数据结构

作业3释放100KB后

操作系统动态分配,算法,c++,数据结构

作业1释放130KB后

操作系统动态分配,算法,c++,数据结构

作业5申请140KB后

操作系统动态分配,算法,c++,数据结构

作业6申请60KB后

操作系统动态分配,算法,c++,数据结构

作业7申请50KB后

操作系统动态分配,算法,c++,数据结构

作业8申请60KB后

操作系统动态分配,算法,c++,数据结构

 最佳适应算法

最佳适应算法在分区链中寻找可以分配且分配后剩余空间最小的分区,这样可以使分区碎片最小化,留下一些大分区,但是每次都要遍历分区链表,效率较低。(或者事先进行排序,维护空闲分区大小升序,但开销还是会比较大,而且合并时也需要查一次分区链)

最佳适应算法与首次适应算法只在分配时策略不同。最佳适应算法分配时从分区链头开始找,直到有一个分区大小 不小于作业大小。如果找不到说明没有分区块可以分配。如果找到,将这个分区块标记下,然后往后寻找大小满足作业要求,又尽可能小的分区,找到就将标记替换。

得到最佳块后,分情况讨论;

若分区块大小等于作业大小且内存只剩这个块,分配后header置null,分区链内存释放

若分区块大小等于作业大小且内存还有多块,将此分配分区 后一个分区的内容赋值给该分区,修改指针后释放后一分区

若分区块大小大于作业大小,只修改分区信息

代码如下

#include<iostream>
#include <conio.h>
using namespace std;
struct block
{
	int address;      //内存块起始地址
	int size;		  //内存块大小
}BLOCK;    //内存块

struct job
{
	char id[10];				//作业id
	int address;	   //作业分配的内存起始地址
	int size;		   //作业需要的大小
	int alloc_size;	   //作业分配的大小
};     //作业

struct free_blocks_linklist
{
	block free_block;   //空闲内存块
	free_blocks_linklist* next;   //指向下一内存块的指针

}Free_Blocks_linklist;  //空闲分区链

job running_job[10];    //运行中的作业数组
int running_job_num = 0;
job waiting_job[10];   //分配失败后等待的作业数组
int waiting_jon_num = 0;
job finish_job[10];	   //完成的作业数组
int finish_job_num = 0;

free_blocks_linklist * header = nullptr;    //内存分区链头指针

void Init()    //初始化内存
{
	header = new free_blocks_linklist;
	
	cout << "请输入内存大小(KB) :     ";
	cin >> header->free_block.size;
	cout << "请输入内存起始地址  :   ";
	cin >> header->free_block.address;
	header->next = header;
	
	
	/*cin >> hex >> a;
	cout << a << endl;
	cout << hex <<a;*/
}

bool alloc_memory(job &j)         //给作业分配内存
{
	free_blocks_linklist* temp = header;
	free_blocks_linklist* temp1 = nullptr;   //最佳块指针
	if (temp == nullptr)
	{
		cout << "\n\n内存不足分配失败" << endl;
		return false;
	}

	do
	{
		if (temp->free_block.size >= j.size)  //可以分配
		{
			temp1 = temp;
			temp = temp->next;
			break;
		}
		temp = temp->next;
	}while (temp != header);           //是否有能分配的块

	if(temp1 == nullptr)
	{
		cout << "\n\n没有合适内存块分配" << endl;
		return false;
	}

	do
	{
		if (temp->free_block.size >= j.size && temp->free_block.size < temp1->free_block.size)
			temp1 = temp;          //找到更合适的分区
		temp = temp->next;

	} while (temp!= header);

	 if (temp1->free_block.size == j.size)   //分区内存正好
	{
		if (temp1->next == temp1)    //只剩一个分区
		{
			j.address = temp1->free_block.address;
			j.alloc_size = j.size;

			delete temp1;
			header = nullptr;
			cout << "\n\n分配内存成功" << endl;
			return true;
		}
		else      //有多个分区
		{
			j.address = temp1->free_block.address;
			j.alloc_size = j.size;


			temp = temp1->next;
			temp1->free_block = temp->free_block;
			temp1->next = temp->next;
			if (temp == header)
				header = header->next;
			delete temp;
			cout << "\n\n分配内存成功" << endl;
			return true;

		}
	}

	else if (temp1->free_block.size > j.size)      //内存块分配后还有空间
	{
		j.address = temp1->free_block.address;
		j.alloc_size = j.size;
			

		temp1->free_block.size -= j.size;
		temp1->free_block.address += j.size;
		cout << "\n\n分配内存成功" << endl;
		cout << "\n\n请按任意键继续" << endl;
		_getch();
		return true;
	}
		
}

void run_job(job j)   //调度运行作业
{
	if (true == alloc_memory(j))     //分配成功
		running_job[running_job_num++] = j;
	else
		waiting_job[waiting_jon_num++] = j;
}

void show_message()        //显示系统信息
{	
	system("cls");
	free_blocks_linklist* temp = header;
	int i = 1;

	cout << "\n\n当前运行的作业数量为:" << running_job_num <<endl;
	cout << "正在等待分配内存的作业数量(分配内存失败)为:" << waiting_jon_num << endl;
	cout << "已完成作业数量为: " << finish_job_num << endl;
	cout << "\n当前内存空间信息如下 :  " << endl;
	if (header != nullptr)
	{
		do
		{
			cout << "\n内存块" << i << "起始地址为: " << temp->free_block.address << endl;
			cout << "内存块" << i << "大小为: " << temp->free_block.size << endl;
			temp = temp->next;
			i++;
		} while (temp != header);
	}
	else cout << "\n内存空间已经用完" << endl;

	cout << "\n\n请按任意键继续" << endl;
	_getch();
}

void input_job()       //输入作业
{
	job temp;
	cout << "请输入作业名: " << endl;
	cin >> temp.id;
	cout << "请输入作业大小: " << endl;
	cin >> temp.size;
	run_job(temp);
	show_message();
	return;
}

void release_memory(int count)    //释放作业内存, count为要释放作业的序号
{
	if (header == nullptr)
	{
		header = new free_blocks_linklist;
		header->free_block.address = running_job[count].address;
		header->free_block.size = running_job[count].alloc_size;
		header->next = header;
		
	}
	else
	{
		free_blocks_linklist* temp = header;
		while (temp->next != header)
		{
			temp = temp->next;
		}              //找到链尾

		if (running_job[count].address == temp->free_block.address + temp->free_block.size)
		{		//作业分配的内存地址最大且可合并
			temp->free_block.size += running_job[count].alloc_size;
		}
		else if (running_job[count].address > temp->free_block.address + temp->free_block.size)
		{	//作业分配的内存地址最大且不可合并
			free_blocks_linklist* temp1 = new free_blocks_linklist;
			temp1->free_block.address = running_job[count].address;
			temp1->free_block.size = running_job[count].alloc_size;
			temp1->next = header;
			temp->next = temp1;
		}


		else if (header->free_block.address == running_job[count].address +   //作业分配的地址最小且可合并
			running_job[count].alloc_size)
		{
			header->free_block.address = running_job[count].address;
			header->free_block.size += running_job[count].alloc_size;
		}

		else if (header->free_block.address > running_job[count].address +  //作业分配的地址最小且不可合并
			running_job[count].alloc_size)
		{
			temp = new free_blocks_linklist;

			temp->free_block.address = running_job[count].address;
			temp->free_block.size = running_job[count].alloc_size;
			temp->next = header;

			free_blocks_linklist* temp1 = header;
			while (temp1->next != header)
				temp1 = temp1->next;
			temp1->next = temp;
			header = temp;

		}
		else                                           //作业回收的地址在分区链中间
		{
			temp = header;
			while (temp->next->free_block.address + temp->next->free_block.size < running_job[count].address)
				temp = temp->next;      //找到要插入的前一分区位置temp

			if (temp->free_block.address + temp->free_block.size == running_job[count].address)
			{	//前分区可以合并
				if (running_job[count].address + running_job[count].alloc_size == temp->next->free_block.address)
				{	//回收时可以和前后分区合并
					temp->free_block.size += running_job[count].alloc_size + temp->next->free_block.size;
					free_blocks_linklist* temp1 = temp->next;
					temp->next = temp1->next;
					delete temp1;
				}
				else    //只能与前分区合并
				{
					temp->free_block.size += running_job[count].alloc_size;
				}
			}
			else          //前分区不可合并
			{
				if (temp->next->free_block.address == running_job[count].address + running_job[count].alloc_size)
				{//后分区可以合并
					temp->next->free_block.address -= running_job[count].alloc_size;
					temp->next->free_block.size += running_job[count].alloc_size;
				}
				else
				{//后分区不可以合并
					free_blocks_linklist* temp1 = new free_blocks_linklist;
					temp1->free_block.address = running_job[count].address;
					temp1->free_block.size = running_job[count].alloc_size;
					temp1->next = temp->next;
					temp->next = temp1;


				}

			}

		}

	}

	
	

	finish_job[finish_job_num++] = running_job[count];
	running_job[count] = running_job[--running_job_num];
	cout << "\n释放内存成功" << endl;
	cout << "\n\n请按任意键继续" << endl;
	_getch();
}

void show_running_job()         //显示正在运行的作业
{
	system("cls");
	int i = 0;
	cout << "当前正在运行的作业信息如下:\n" << endl;
	while (i < running_job_num)
	{
		cout << "序号:    " << i 
			<< "\t作业名: " << running_job[i].id 
			<< "\t大小:   " << running_job[i].size << endl;
		i++;
	}
	
	cout << "请输入要释放的作业序号 : ";
	cin >> i;

	if (i >= running_job_num || i < 0)
	{
		cout << "\n\n输入序号有误,请按任意键重新输入" << endl;
		show_running_job();
	}
	else
	{
		release_memory(i);
		show_message();
	}
}

void release_job()           //释放作业
{
	show_running_job();
}

void menu()        //选项菜单
{
	char choice;
	while (1)
	{
		system("cls");
		cout << " 1: 输入作业" << endl;
		cout << " 2: 释放作业" << endl;
		cout << " 3: 离开" << endl;
		cout << "\n\n\n请输入选择: " << endl;
		choice = _getch();
		if (choice == '1')
			input_job();
		else if (choice == '2')
			release_job();
		else if (choice == '3')
			exit(0);
		else 
		{
			cout << "输入有误,请按任意键继续" << endl;
			_getch();
			}
	}
}

int main()
{
	Init();
	menu();
	return 0;
}

输入内存大小640KB,起始地址0

操作系统动态分配,算法,c++,数据结构

作业1申请130KB后

 操作系统动态分配,算法,c++,数据结构

作业2申请60KB后

操作系统动态分配,算法,c++,数据结构

作业3申请100KB后

操作系统动态分配,算法,c++,数据结构

 作业2释放60KB后

操作系统动态分配,算法,c++,数据结构

 作业4申请200KB后

操作系统动态分配,算法,c++,数据结构

 作业3释放100KB后

操作系统动态分配,算法,c++,数据结构

 作业1释放130KB后

操作系统动态分配,算法,c++,数据结构

 作业5申请140KB后

操作系统动态分配,算法,c++,数据结构

 作业6申请60KB后

操作系统动态分配,算法,c++,数据结构

 作业7申请50KB后

操作系统动态分配,算法,c++,数据结构

 作业8申请60KB后

操作系统动态分配,算法,c++,数据结构

 文章来源地址https://www.toymoban.com/news/detail-759770.html

 

到了这里,关于操作系统简单动态分区分配算法(c++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 操作系统-内存分配算法

    操作系统原理实验报告 实验题目   实 验 四内存分配算法     1.1 实验目的 一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请主存储器空间时,存储管理必须根据申请者的要求,

    2024年02月03日
    浏览(47)
  • 内存动态分区分配算法

    所谓动态分区分配,就是指 内存在初始时不会划分区域,而是会在进程装入时,根据所要装入的进程大小动态地对内存空间进行划分,以提高内存空间利用率,降低碎片的大小 动态分区分配算法有以下四种: 1. 首次适应算法(First Fit) 空闲分区以 地址递增的次序链接 。分

    2024年02月11日
    浏览(50)
  • 动态异长分区内存分配与去配算法的设计-最佳适应算法

    理解存储管理的功能,掌握动态异长分区内存管理中的最佳适应算法。 本设计要求模拟最佳适应算法的分配算法和回收算法。 空闲区域首址 空闲区域长度 … … addr size … … 图1-1 空闲区域表 为了实现存储资源的分配和回收,操作系统需要记录内存资源使用情况,即哪些区

    2024年02月19日
    浏览(47)
  • 【操作系统】基于动态优先级的进程调度算法-C语言实现(有代码)

    本文章将会介绍如何编写动态优先级的进程调度算法,并使用从语言实现。 一、什么是动态优先级的调度算法        进程运行一个时间片后,如果进程已占用 CPU时间已达到所需要的运行时间,则撤消该进程;如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行

    2024年02月06日
    浏览(50)
  • 操作系统中文件系统的实现和分配方式探析(下)

    我们已经对连续分配的方式有了一定的了解,并且也清楚了它存在的问题和局限性。为了解决这些问题,非连续存放的方式应运而生。非连续空间存储大致可以分为两种形式:链表形式和索引形式。 链式分配是一种离散分配的方式,用于为文件分配非连续的磁盘块。它有两种

    2024年02月10日
    浏览(41)
  • 操作系统中文件系统的实现和分配方式探析(上)

    在 Linux 文件系统中,用户空间、系统调用、虚拟机文件系统、缓存、文件系统以及存储之间存在着紧密的关系。 如下图: 在操作系统中,文件系统起到了重要的作用,它们负责管理操作系统中的文件和目录。然而,不同的文件系统有着不同的实现方式和存储位置。为了提供

    2024年02月10日
    浏览(35)
  • GUID分区与MBR分区有什么区别? 操作系统知识

    GUID分区与MBR分区有什么区别? 操作系统知识 1、MBR分区表类型的磁盘 主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘,最多只能识别4个主要分区(Pr

    2024年02月13日
    浏览(42)
  • 操作系统实验(一)——可变分区存储管理

    湖南师范大学信息科学与工程学院计算机科学与技术非师范班操作系统实验报告 一、实验目的: 加深对可变分区存储管理的理解; 提高用C语言编制大型系统程序的能力,特别是掌握C语言编程的难点:指针和指针作为函数参数; 掌握用指针实现链表和在链表上的基本操作。

    2024年02月06日
    浏览(43)
  • 银河麒麟桌面操作系统之磁盘分区与磁盘挂载

    今天跟大家分享一篇干货 - - 银河麒麟添加硬盘与挂载硬盘,也就是磁盘分区与磁盘挂载 本文使用fdisk命令进行操作 测试环境:虚拟机(因为使用的是虚拟机,因此小编添加的磁盘容量较小) 系统版本:Kylin-Desktop-V10-SP1-Release-hwe-2107 注:此为桌面系统教程 磁盘分区 1.我们打

    2024年01月19日
    浏览(207)
  • Ubuntu20.04操作系统安装及重中之重:系统分区

    最近因为学习原因,需要将电脑设置为双系统,在windows10的系统下去安装Ubuntu操作系统。本来看网上相关的安装教程蛮多的,以为比较简单,结果一路过五关斩六将,坑的七零八落的,折腾了好久,才算安装完成了。 在此将Ubuntu20.04的系统安装过程总结记录,以供报考。 准备

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包