linux中,驱动程序属于内核吗谢谢。内核中都有什么呀谢谢

linux中,驱动程序属于内核吗谢谢。内核中都有什么呀谢谢,第1张

驱动程序属于内核的一个部分。准确的说是内核的一个组件。不包含驱动的内核也叫做内核,并且这也是我们常说的内核。内核要干的事情无非5件。

1,内存管理

2,虚拟文件系统

3,进程调度

4,网络接口

5,进程间通信

驱动更像是内核的扩展组件来帮助内核实现硬件的连接和 *** 控。内核通过提供统一的驱动 *** 作接口供用户层使用,驱动就是在这层统一的接口下实现硬件的 *** 控的中间层。

(1)应用程序基本上是从头到尾执行单个任务,而模块却需要事先向系统注册自己以便为将来的请求服务,并且模块有自己的模块初始化函数和模块退出函数。

(2)不是所有的应用程序都是事件驱动的,但内核模块却是,应用模块在退出时,可以不需要释放自己之前申请的资源或者其他的清除工作,但模块的退出却需要使用模块退出函数来仔细撤销初始化函数所做的一切,否则在系统重新引导之前某些东西就会残留在系统中。

(3)应用程序可以调用用户未定义的函数,但这个函数在某个库中,在链接过程中,编译器能够解析外部引用从而使用适当的函数库来调用这个函数,例如,定义在libc中的printf函数就是这种可直接调用的函数,但对于内核模块来说,模块仅仅被链接到内核中,只能调用由内核定义导出的函数,如printk就是由内核提供给模块使用的一个类printf的内核版本,故而模块源文件中不能包含通常的头文件。另外,printf和printk最大的不同在于printk缺乏对浮点数的支持。

(4)还有一点不同在于不同环境下二者处理错误的方式不同,对于应用程序,在开发过程中发生段错误是无害的,可以使用调试器跟踪到源代码问题所在,但内核错误即使不影响整个系统,也至少会杀死当前进程。

有三个办法:

一、最直接的办法,用nohup命令,将程序挂到后台。

二、最方便的办法,用screen命令,起个虚拟终端,即使断开连接也能继续在后台跑。

三、最正常的思路,是将监听程序置为daemon,直接在后台运行,具体是监听程序启动后,fork一个子进程,将子进程setsid,然后父进程退出,实际 *** 作都放到子进程中。

当然程序里面的循环结构是肯定要的。

我的理解:

内核程序设计:就是数据处理流程设计,比如:用户要求一组已经存入的数据,从中找到符合要求的数据,如何去找?你首先要知道用户的这个要求是要满足多少条件?然后,这些条件的先后主次,是否有要求?需要使用多少查询语句或模块?每个查询模块是否要增加参数选项?这些都是内核设计中要考虑的问题。你把以上模块按照你的思路,分成先后顺序,这就是数据处理流程设计了。

外核程序设计:我认为可能是外壳程序设计,就是数据处理流程设计完成后,具体的数据是用户录入还是文件表格导入?用户界面如何设计?输出打印如何设计?打印界面如何设计?外壳程序设计主要是面向用户的界面的设计。

Linux 内核设计的理念主要有这几个点:

MutiTask,多任务

SMP,对称多处理

ELF,可执行文件链接格式

Monolithic Kernel,宏内核

MutiTask

MutiTask 的意思是多任务,代表着 Linux 是一个多任务的 *** 作系统。多任务意味着可以有多个任务同时执行,这里的「同时」可以是并发或并行:

对于单核 CPU 时,可以让每个任务执行一小段时间,时间到就切换另外一个任务,从宏观角度看,一段时间内执行了多个任务,这被称为并发。

对于多核 CPU 时,多个任务可以同时被不同核心的 CPU 同时执行,这被称为并行。

SMP

SMP 的意思是对称多处理,代表着每个 CPU 的地位是相等的,对资源的使用权限也是相同的,多个 CPU 共享同一个内存,每个 CPU 都可以访问完整的内存和硬件资源。

这个特点决定了 Linux *** 作系统不会有某个 CPU 单独服务应用程序或内核程序,而是每个程序都可以被分配到任意一个 CPU 上被执行。

ELF

ELF 的意思是可执行文件链接格式,它是 Linux *** 作系统中可执行文件的存储格式;

ELF 文件格式

ELF 把文件分成了一个个分段,每一个段都有自己的作用,具体每个段的作用这里就不详细说明了,感兴趣的同学可以去看《程序员的自我修养——链接、装载和库》这本书。

另外,ELF 文件有两种索引,Program header table 中记录了「运行时」所需的段,而 Section header table 记录了二进制文件中各个「段的首地址」。

那 ELF 文件怎么生成的呢?

我们编写的代码,首先通过「编译器」编译成汇编代码,接着通过「汇编器」变成目标代码,也就是目标文件,最后通过「链接器」把多个目标文件以及调用的各种函数库链接起来,形成一个可执行文件,也就是 ELF 文件。

那 ELF 文件是怎么被执行的呢?

执行 ELF 文件的时候,会通过「装载器」把 ELF 文件装载到内存里,CPU 读取内存中宏内核的特征是系统内核的所有模块,比如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。

不过,Linux 也实现了动态加载内核模块的功能,例如大部分设备驱动是以可加载模块的形式存在的,与内核其他模块解藕,让驱动开发和驱动加载更为方便、灵活。

64位的linux采用4级页表,支持的最大物理内存为64T。

对于虚拟地址空间的划分,将0x0000,0000,0000,0000 – 0x0000,7fff,ffff,f000这128T地址用于用户空间;而0xffff,8000,0000,0000以上的128T为系统空间地址。

以上就是关于linux中,驱动程序属于内核吗谢谢。内核中都有什么呀谢谢全部的内容,包括:linux中,驱动程序属于内核吗谢谢。内核中都有什么呀谢谢、内核模块和应用程序的区别、如何让linux的一段c程序运行在内核态等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9395429.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存