linux操作系统原理与应用
❶ linux驱动程序结构框架及工作原理分别是什么
一、Linux device driver 的概念x0dx0ax0dx0a系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能:x0dx0ax0dx0a1、对设备初始化和释放;x0dx0ax0dx0a2、把数据从内核传送到硬件和从硬件读取数据;x0dx0ax0dx0a3、读取应用程序传送给设备文件的数据和回送应用程序请求的数据;x0dx0ax0dx0a4、检测和处理设备出现的错误。x0dx0ax0dx0a在Linux操作系统下有三类主要的设备文件类型,一是字符设备,二是块设备,三是网络设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。x0dx0ax0dx0a已经提到,用户进程是通过设备文件来与实际的硬件打交道。每个设备文件都都有其文件属性(c/b),表示是字符设备还是块设备?另外每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。x0dx0ax0dx0a最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度。也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作。如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然后就是漫长的fsck。x0dx0ax0dx0a二、实例剖析x0dx0ax0dx0a我们来写一个最简单的字符设备驱动程序。虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理。把下面的C代码输入机器,你就会获得一个真正的设备驱动程序。x0dx0ax0dx0a由于用户进程是通过设备文件同硬件打交道,对设备文件的操作方式不外乎就是一些系统调用,如 open,read,write,close?, 注意,不是fopen, fread,但是如何把系统调用和驱动程序关联起来呢?这需要了解一个非常关键的数据结构:x0dx0ax0dx0aSTruct file_operatiONs {x0dx0ax0dx0aint (*seek) (struct inode * ,struct file *, off_t ,int);x0dx0ax0dx0aint (*read) (struct inode * ,struct file *, char ,int);x0dx0ax0dx0aint (*write) (struct inode * ,struct file *, off_t ,int);x0dx0ax0dx0aint (*readdir) (struct inode * ,struct file *, struct dirent * ,int);x0dx0ax0dx0aint (*select) (struct inode * ,struct file *, int ,select_table *);x0dx0ax0dx0aint (*ioctl) (struct inode * ,struct file *, unsined int ,unsigned long);x0dx0ax0dx0aint (*mmap) (struct inode * ,struct file *, struct vm_area_struct *);x0dx0ax0dx0aint (*open) (struct inode * ,struct file *);x0dx0ax0dx0aint (*release) (struct inode * ,struct file *);x0dx0ax0dx0aint (*fsync) (struct inode * ,struct file *);x0dx0ax0dx0aint (*fasync) (struct inode * ,struct file *,int);x0dx0ax0dx0aint (*check_media_change) (struct inode * ,struct file *);x0dx0ax0dx0aint (*revalidate) (dev_t dev);x0dx0ax0dx0a}x0dx0ax0dx0a这个结构的每一个成员的名字都对应着一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是linux的设备驱动程序工作的基本原理。既然是这样,则编写设备驱动程序的主要工作就是编写子函数,并填充file_operations的各个域。x0dx0ax0dx0a下面就开始写子程序。x0dx0ax0dx0a#include
❷ Linux操作系统原理及应用的内容提要:
本书介绍操作系统的基本原理及应用,并以Linux操作系统作为具体实例加以说明。全书共9章,主要内容包括操作系统的基本概念、功能、操作系统的发展史及Linux操作系统概述,进程的概念、进程描述、进程控制、进程的同步与互斥、进程通信及线程,作业调度及进程调度、死锁的概念与产生原因以及解决死锁的方法,各种内存管理及分配方法的思想、数据结构、重定位及实现原理,文件的逻辑结构、物理结构及文件系统的构成,操作系统对设备的控制、分配、缓冲区的管理等,Linux系统的网络功能,现代流行的UNIX、Windows2000操作系统的特点、原理以及分布式操作系统的概况,操作系统的安全性。本书例题及课后习题丰富,便于初学者对操作系统原理进行理解、掌握并运用;在配套教材《操作系统原理及应用——学习指导与题解》中,为各章提供了内容要点复习、教材习题解答、新增习题及解答,并为各部分原理提供了一些实训内容。
本书内容全面,选材适当,结构合理,理论结合实际,可作为应用型本科、成人高校、高职高专院校计算机及相关专业的操作系统课程的教材,也可以作为相关专业的师生及专业技术人员的参考书。
本书所配电子教案可以从中国水利水电
❸ linux操作系统的用处以及它是用来干嘛的,还有它跟其他的操作系统有什么不一样
一个嵌入式软件分为内核,架构和应用等几个层次。任何外设和应用层软件都将被以文件形式调用。
从底层来讲,linux是属于模仿unix,(unix也就是苹果用的内核写的开源系统),linux除部分小型机上用,一些小众的手持设备如工控设备,测试设备,游戏机,电子阅读器等也用得很好,它有稳定,高效,功耗低等优点,还有大量的开源程序可供“搭积木”,根据硬件和产品功能不同,系统可大可小,丰检由人。
而android 系统由于有谷歌这个big boy号召,主要打算用在手持移动设备上,应用程序将潜力巨大,但安卓的出现到底是否会导致linux开发者失业,答案是否定的,android还在面纱之下,除非高手,还没有人有精力彻底弄懂它的源程序,但linux则可以被很多产品商做到非常节省cpu资源,非常省电,针对某一个行业来说,支持程序也足够。
android的各个产品的CPU型号千变万化,一个厂家一个架构。 而且手机跟PC的硬件也不同。 必然导致其内核的不同,从底层来讲,linux与android的内核支持架构有很大区别。 即便同样是android系统本身,由于不同型号的手机,使用的硬件也不同,所以使用的内核也就不同,这也是为什么普遍的, 没一款手机几乎都有自己的底包,不能像PC那样互通。 关键是由于现在的手机和平板的CPU,硬件架构没有一个同一的标准。
架构上,安卓虽说自己写了部分架构程序,但其实还是抄袭了linux的思路,两家正在打口水仗,因为成熟的安卓还没有完全亮相,linux的老祖宗们,以及谷歌的对手们都眼里闪着绿光在等着呢。 linux的lib也是可以随便定制的。即,架构层android和linux原理是一样的,其lib是要依赖底包。
应用的区别,主要指lib之上是各种应用。如果将每一个linux分支比作一棵树,安卓属于linux体系下的其中一棵树,安卓这棵树明显的优势是集团作战,理论上说,其应用非常丰富,无所不能。 而一般linux由于不同的树长上去面对的应用对象不同,无法体现这一优势。
总体来说呢,android采用了linux系统的开发思想跟工作原理。 lib这个中间层很多都是照搬linux核心lib重新定制开发的。 所以,说android是一种嵌入式定制的linux系统也是可以的,并列于任何一个linux系统下的小众设备系统。