linux教程第08课内存与设备管理.ppt
《linux教程第08课内存与设备管理.ppt》由会员分享,可在线阅读,更多相关《linux教程第08课内存与设备管理.ppt(44页珍藏版)》请在三一办公上搜索。
1、5.4 内 存 管 理,操作系统常用的内存管理方式:单一分配方式分区式分配方式页式分配方式段式分配方式Linux系统采用了虚拟内存管理机制,就是交换和请求分页存储管理技术,程序的链接和内存装入,连续分配方式,单一连续分配,这是最简单的一种存储管理方式,但只能用于单用户、单任务的操作系统中。采用这种存储管理方式时,可把内存分为系统区和用户区两部分,系统区仅提供给OS使用,通常是放在内存的低址部分;用户区是指除系统区以外的全部内存空间,提供给用户使用。,固定分区分配,1.划分分区的方法,分区大小相等,即使所有的内存分区大小相等。(2)分区大小不等。,2.内存分配,固定分区使用表,4.2.3 动态分
2、区分配,1.分区分配中的数据结构,空闲分区表。(2)空闲分区链。,空闲链结构,5.4.1 请求分页机制1分页概念逻辑空间分页 内存空间分页页面和内存块的大小是由硬件确定的 逻辑地址表示 内存分配原则页表,2请求分页的基本思想请求分页提供虚拟存储器 在每一个页表项中增加一个状态位表示一个页面是否已装入内存块如果地址转换机构遇到一个具有N状态的页表项时,便产生一个缺页中断,3Linux的多级页表Linux进程的虚存空间 Linux系统采用三级页表的方式,4内存页的分配与释放Linux系统采用两种方法来管理内存页:位图和链表 页组中内存页的数量依次按2的倍数递增,5.4.2 内存交换,内核的交换守护
3、进程kswapd:有自己的进程控制块task_struct结构,它与其他进程一样受内核的调度。但是,它没有自己独立的地址空间,只使用系统空间,所以也把它称为线程。它的任务就是保证系统中有足够的空闲内存页。当系统启动时,交换守护进程由内核的init(初始化)进程启动。被定时唤醒。所做的工作主要分为两部分:将若干不常用的活跃内存页面变为不活跃状态;清理不活跃的“脏”页面,或者回收一些内存页,使之成为空闲的内存页。作为交换空间的交换文件实际就是普通文件,但它们所占的磁盘空间必须是连续的,7.5 内 存 管 理,#include void*malloc(size_t size);#include vo
4、id*calloc(size_t nmemb,size_t size);#include void*realloc(void*ptr,size_t size);#include void free(void*ptr);,5.6 设 备 管 理5.6.1 设备管理概述,所有设备都作为特别文件,从而在管理上就具有下列共性:(1)每个设备都对应文件系统中的一个索引节点,都有一个文件名。(2)应用程序通常可以通过系统调用open()打开设备文件,建立起与目标设备的连接。(3)对设备的使用类似于对文件的存取。(4)设备驱动程序是系统内核的一部分,它们必须为系统内核或者它们的子系统提供标准的接口。(5)设
5、备驱动程序利用一些标准的内核服务,如内存分配等。另外,大多数Linux设备驱动程序都可以在需要时装入内核,不需要时卸载下来。,设备驱动的分层结构,5.6.2 设备驱动程序和内核之间的接口,1可安装模块可安装模块是可以在系统运行时动态地安装和拆卸的内核模块,即经过编译但尚未连接的目标文件(后缀为.o)。设备驱动程序或者与设备驱动紧密相关的部分(如文件系统)都是利用可安装模块实现的。在通常情况下,用户利用系统提供的插入模块工具和移走模块工具来装卸可安装模块。,2字符设备用户对字符设备的使用就和存取普通文件一样。在应用程序中使用标准的系统调用来打开、关闭、读写字符设备。,3块设备对块设备的存取与对文
6、件的存取方式一样,其实现机制也与字符设备使用的机制相同。,设备驱动与文件系统的关系,设备驱动是Linux内核的重要组成部分。驱动程序跟一般的用户应用程序不同,它工作在内核态,编程方法和使用的库函数都跟用户级的应用程序有所区别。在Linux内核中,设备驱动跟文件系统联系紧密。每一个设备都是作为一个设备文件,交给文件系统去管理的。设备驱动程序内部是由一组函数组成的。函数由设备驱动的上层文件系统来调用,每一个函数被称做一个入口点。入口点的集合被称为设备驱动程序的上半部分,实现设备驱动与文件系统的接口。常用的入口点有:open、close(或release)、read、write、ioctl等。每一个
7、函数的内部实现被称作驱动程序的下半部分,负责实现具体的设备操作。函数的内部实现通常是靠系统调用提供的函数实现的,不能使用平常我们使用的用户级的C语言库函数。,Linux通过设备号来区分不同的设备。设备号由两部分组成:主设备号MAJOR和次设备号MINOR。主设备号MAJOR指明对应哪些设备驱动。一般一个主设备号对应一个驱动程序。次设备号MINOR用来区分同一个驱动程序控制下的不同的独立的设备。例如:硬盘的主设备名称为hd。在/dev目录下hd即为硬盘。/dev/hda、/dev/hdb等是系统的第一个硬盘和第二个硬盘。而hda0和hda1分别是第一个硬盘上的第一个分区和第二个分区。/proc/
8、devices列出所有现在正在使用的设备号。,设备号,Linux操作系统将所有的设备全部看成文件,并通过文件的操作界面进行操作,用户程序可以像对其他文件一样对此设备文件进行操作。这意味着:由于每一个设备至少由文件系统的一个文件代表,因而都有一个“文件名”。应用程序通常可以通过系统调用open()打开设备文件,建立起与目标设备的连接。打开了代表着目标设备的文件,即建立起与设备的连接后,可以通过read()、write()、ioctl()等常规的文件操作对目标设备进行操作。设备文件的属性由三部分信息组成:第一部分是文件的类型,第二部分是一个主设备号,第三部分是一个次设备号。其中类型和主设备号结合在
9、一起惟一地确定了设备文件驱动程序及其界面,而次设备号则说明目标设备是同类设备中的第几个。,设备文件,设备文件不能用普通的办法建立。要通过mknod命令。mknod命令的语法:mknod 路径 模式 主设备号 次设备号模式有两种:c为字符设备 b为块设备例如:mknod/dev/test c 254 0设备文件可以象普通文件一样直接使用,例如:/dev/lp0为一个打印机,使用cat doc.txt/dev/lp0就可以将文档交给打印机去进行打印/dev/ttyS0为主机上的串口COM1,使用读写文件的方法,也可以实现对串口的读写操作,设备文件,一、设备驱动中的关键数据结构二、驱动程序框架三、实
10、现各种功能的基本函数四、实例,设备驱动基础,要编写设备驱动程序,就要实现它跟高层文件系统和底层硬件之间的操作接口。这些接口一般要遵循DDI/DKI(Device-Driver Interface/Device-Kernel Interface)接口规范,所以要使用一些标准的数据结构来进行操作。底层硬件的操作主要由不同硬件的特性来决定。跟文件系统的接口主要使用三个数据结构:inode文件索引节点结构struct file文件结构file_operations文件操作结构,设备驱动程序要实现这个结构里的主要操作,一、设备驱动中的关键数据结构,struct inode称做索引节点数据结构,定义如下:
11、struct inode struct list_headi_hash;struct list_headi_list;struct list_headi_dentry;struct list_headi_dirty_buffers;struct list_headi_dirty_data_buffers;unsigned longi_ino;atomic_ti_count;kdev_ti_dev;umode_ti_mode;nlink_ti_nlink;uid_ti_uid;gid_ti_gid;kdev_ti_rdev;loff_ti_size;time_ti_atime;time_ti_m
12、time;time_ti_ctime;unsigned inti_blkbits;unsigned longi_blksize;unsigned longi_blocks;unsigned longi_version;struct semaphorei_sem;struct semaphorei_zombie;struct inode_operations*i_op;struct file_operations*i_fop;/文件操作指针struct super_block*i_sb;wait_queue_head_ti_wait;struct file_lock*i_flock;struct
13、 address_space*i_mapping;struct address_spacei_data;struct dquot*i_dquotMAXQUOTAS;struct list_headi_devices;struct pipe_inode_info*i_pipe;struct block_device*i_bdev;/块设备struct char_device*i_cdev;/字符设备unsigned longi_dnotify_mask;struct dnotify_struct*i_dnotify;unsigned longi_state;unsigned inti_flags
14、;unsigned chari_sock;atomic_ti_writecount;unsigned inti_attr_flags;,_u32i_generation;union struct minix_inode_infominix_i;struct ext2_inode_infoext2_i;struct ext3_inode_infoext3_i;struct hpfs_inode_infohpfs_i;struct ntfs_inode_infontfs_i;struct msdos_inode_infomsdos_i;struct umsdos_inode_infoumsdos_
15、i;struct iso_inode_infoisofs_i;struct nfs_inode_infonfs_i;struct sysv_inode_infosysv_i;struct affs_inode_infoaffs_i;struct ufs_inode_infoufs_i;struct efs_inode_infoefs_i;struct romfs_inode_inforomfs_i;struct shmem_inode_infoshmem_i;struct coda_inode_infocoda_i;struct smb_inode_infosmbfs_i;struct hfs
16、_inode_infohfs_i;struct adfs_inode_infoadfs_i;struct qnx4_inode_infoqnx4_i;struct reiserfs_inode_inforeiserfs_i;struct bfs_inode_infobfs_i;struct udf_inode_infoudf_i;struct ncp_inode_infoncpfs_i;struct proc_inode_infoproc_i;struct socketsocket_i;struct usbdev_inode_info usbdev_i;struct jffs2_inode_i
17、nfojffs2_i;void*generic_ip;u;,struct file主要用于与文件系统相关的设备驱动程序,可提供关于被打开的文件的信息,定义如下:struct file struct list_headf_list;struct dentry*f_dentry;struct vfsmount*f_vfsmnt;struct file_operations*f_op;atomic_tf_count;unsigned int f_flags;mode_tf_mode;loff_tf_pos;unsigned long f_reada,f_ramax,f_raend,f_ralen,f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 教程 08 内存 设备管理

链接地址:https://www.31ppt.com/p-5382326.html