欢迎来到天天文库
浏览记录
ID:36315337
大小:540.00 KB
页数:44页
时间:2019-05-09
《linux教程第08课内存与设备管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、5.4内存管理操作系统常用的内存管理方式:单一分配方式分区式分配方式页式分配方式段式分配方式Linux系统采用了虚拟内存管理机制,就是交换和请求分页存储管理技术程序的链接和内存装入连续分配方式单一连续分配这是最简单的一种存储管理方式,但只能用于单用户、单任务的操作系统中。采用这种存储管理方式时,可把内存分为系统区和用户区两部分,系统区仅提供给OS使用,通常是放在内存的低址部分;用户区是指除系统区以外的全部内存空间,提供给用户使用。固定分区分配1.划分分区的方法分区大小相等,即使所有的内存分区大小相等。(2)分区大小不等。2.内存分配固定分区使用表4
2、.2.3动态分区分配1.分区分配中的数据结构空闲分区表。(2)空闲分区链。空闲链结构5.4.1请求分页机制1.分页概念逻辑空间分页内存空间分页页面和内存块的大小是由硬件确定的逻辑地址表示内存分配原则页表2.请求分页的基本思想请求分页提供虚拟存储器在每一个页表项中增加一个状态位表示一个页面是否已装入内存块如果地址转换机构遇到一个具有N状态的页表项时,便产生一个缺页中断3.Linux的多级页表Linux进程的虚存空间Linux系统采用三级页表的方式4.内存页的分配与释放Linux系统采用两种方法来管理内存页:位图和链表页组中内存页的数量依次按2的倍数递
3、增5.4.2内存交换内核的交换守护进程kswapd:有自己的进程控制块task_struct结构,它与其他进程一样受内核的调度。但是,它没有自己独立的地址空间,只使用系统空间,所以也把它称为线程。它的任务就是保证系统中有足够的空闲内存页。当系统启动时,交换守护进程由内核的init(初始化)进程启动。被定时唤醒。所做的工作主要分为两部分:将若干不常用的活跃内存页面变为不活跃状态;清理不活跃的“脏”页面,或者回收一些内存页,使之成为空闲的内存页。作为交换空间的交换文件实际就是普通文件,但它们所占的磁盘空间必须是连续的7.5内存管理#include4、dlib.h>void*malloc(size_tsize);#includevoid*calloc(size_tnmemb,size_tsize);#includevoid*realloc(void*ptr,size_tsize);#includevoidfree(void*ptr);5.6设备管理5.6.1设备管理概述所有设备都作为特别文件,从而在管理上就具有下列共性:(1)每个设备都对应文件系统中的一个索引节点,都有一个文件名。(2)应用程序通常可以通过系统调用open()打开设备文5、件,建立起与目标设备的连接。(3)对设备的使用类似于对文件的存取。(4)设备驱动程序是系统内核的一部分,它们必须为系统内核或者它们的子系统提供标准的接口。(5)设备驱动程序利用一些标准的内核服务,如内存分配等。另外,大多数Linux设备驱动程序都可以在需要时装入内核,不需要时卸载下来。设备驱动的分层结构5.6.2设备驱动程序和内核之间的接口1.可安装模块可安装模块是可以在系统运行时动态地安装和拆卸的内核模块,即经过编译但尚未连接的目标文件(后缀为.o)。设备驱动程序或者与设备驱动紧密相关的部分(如文件系统)都是利用可安装模块实现的。在通常情况下,用6、户利用系统提供的插入模块工具和移走模块工具来装卸可安装模块。2.字符设备用户对字符设备的使用就和存取普通文件一样。在应用程序中使用标准的系统调用来打开、关闭、读写字符设备。3.块设备对块设备的存取与对文件的存取方式一样,其实现机制也与字符设备使用的机制相同。设备驱动与文件系统的关系设备驱动是Linux内核的重要组成部分。驱动程序跟一般的用户应用程序不同,它工作在内核态,编程方法和使用的库函数都跟用户级的应用程序有所区别。在Linux内核中,设备驱动跟文件系统联系紧密。每一个设备都是作为一个设备文件,交给文件系统去管理的。设备驱动程序内部是由一组函数7、组成的。函数由设备驱动的上层-文件系统来调用,每一个函数被称做一个入口点。入口点的集合被称为设备驱动程序的上半部分,实现设备驱动与文件系统的接口。常用的入口点有:open、close(或release)、read、write、ioctl等。每一个函数的内部实现被称作驱动程序的下半部分,负责实现具体的设备操作。函数的内部实现通常是靠系统调用提供的函数实现的,不能使用平常我们使用的用户级的C语言库函数。Linux通过设备号来区分不同的设备。设备号由两部分组成:主设备号MAJOR和次设备号MINOR。主设备号MAJOR指明对应哪些设备驱动。一般一个主设备8、号对应一个驱动程序。次设备号MINOR用来区分同一个驱动程序控制下的不同的独立的设备。例如:硬盘的主设备名称为hd。在/d
4、dlib.h>void*malloc(size_tsize);#includevoid*calloc(size_tnmemb,size_tsize);#includevoid*realloc(void*ptr,size_tsize);#includevoidfree(void*ptr);5.6设备管理5.6.1设备管理概述所有设备都作为特别文件,从而在管理上就具有下列共性:(1)每个设备都对应文件系统中的一个索引节点,都有一个文件名。(2)应用程序通常可以通过系统调用open()打开设备文
5、件,建立起与目标设备的连接。(3)对设备的使用类似于对文件的存取。(4)设备驱动程序是系统内核的一部分,它们必须为系统内核或者它们的子系统提供标准的接口。(5)设备驱动程序利用一些标准的内核服务,如内存分配等。另外,大多数Linux设备驱动程序都可以在需要时装入内核,不需要时卸载下来。设备驱动的分层结构5.6.2设备驱动程序和内核之间的接口1.可安装模块可安装模块是可以在系统运行时动态地安装和拆卸的内核模块,即经过编译但尚未连接的目标文件(后缀为.o)。设备驱动程序或者与设备驱动紧密相关的部分(如文件系统)都是利用可安装模块实现的。在通常情况下,用
6、户利用系统提供的插入模块工具和移走模块工具来装卸可安装模块。2.字符设备用户对字符设备的使用就和存取普通文件一样。在应用程序中使用标准的系统调用来打开、关闭、读写字符设备。3.块设备对块设备的存取与对文件的存取方式一样,其实现机制也与字符设备使用的机制相同。设备驱动与文件系统的关系设备驱动是Linux内核的重要组成部分。驱动程序跟一般的用户应用程序不同,它工作在内核态,编程方法和使用的库函数都跟用户级的应用程序有所区别。在Linux内核中,设备驱动跟文件系统联系紧密。每一个设备都是作为一个设备文件,交给文件系统去管理的。设备驱动程序内部是由一组函数
7、组成的。函数由设备驱动的上层-文件系统来调用,每一个函数被称做一个入口点。入口点的集合被称为设备驱动程序的上半部分,实现设备驱动与文件系统的接口。常用的入口点有:open、close(或release)、read、write、ioctl等。每一个函数的内部实现被称作驱动程序的下半部分,负责实现具体的设备操作。函数的内部实现通常是靠系统调用提供的函数实现的,不能使用平常我们使用的用户级的C语言库函数。Linux通过设备号来区分不同的设备。设备号由两部分组成:主设备号MAJOR和次设备号MINOR。主设备号MAJOR指明对应哪些设备驱动。一般一个主设备
8、号对应一个驱动程序。次设备号MINOR用来区分同一个驱动程序控制下的不同的独立的设备。例如:硬盘的主设备名称为hd。在/d
此文档下载收益归作者所有