Linux内核开发基础

Linux内核开发基础

ID:46613041

大小:87.50 KB

页数:7页

时间:2019-11-26

Linux内核开发基础_第1页
Linux内核开发基础_第2页
Linux内核开发基础_第3页
Linux内核开发基础_第4页
Linux内核开发基础_第5页
资源描述:

《Linux内核开发基础》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux内核开发基础1.操作系统内核的功能构成内核是整个操作系统的核心,通常婆完成如下的功能:(1)进程管理进程(process)可以定义为“执行程序的一个实例”。系统可以同时运行多个进程。内核负责进程的创建、销毁,进程调度。内核本身不是一个进程,而是进程的管理者。(2)内存管理管理进程地址空间。每个进程都运行在它的私有空间。在用户态先运行的进程涉及到私有栈、数据区和代码区。当在内核态运行时,进程访问内核的数据区和代码区,但使用内核栈。(3)提供文件系统支持UNIX中的所用东西儿乎都可以当作文件来看待。文件的类型冇:普通文件目

2、录符号链接(硕链接是冃录中的文件名,而符号(软)链接是一个短文件)面向块的设备文件面向字符的设备文件管道和命名管道(FIFO)套接字(socket)(4)设备控制通过各种类型的驱动来完成(5)中断和异常相应内核还要负责相应外部设备的中断请求,以及进程产生的界常(6)网络功能2.操作系统的运行状态(1)内核态和用户态用户进程需要和硬件进行交互,一些操作系统允许所有的用户程序都直接与硬件部分交互(如MS-DOS)o相反类unix操作系统把与物理硬件相关的访问都対用户隐藏起來,当用户想使用硬件资源时,需要想内核发起请求,内核代表应用程

3、序与相关的哽件进行交互。为了实现这种机制,现在操作系统通过特殊的硬件特性肓接与底层硬件交互,或者禁止肓接访问任意的物理地址。(2)内核态内核在此时运行,拥有受保护的内存空间和访问硬件的所有权限。(3)用户态用户应用程序在此时运行,它们只能看到允许它们使用的部分资源,不能直接访问换件,还有一些其它限制。硬件处理器常常提供多种状态,比如x86有4利「,arm有7利「,但所有标准的unix内核只用了内核态和用户态。(4)进程上下文和中断上下文Cpu在任意时间只可能运行在下面3种情况:运行在内核空间,处于进程上下文,代表某个特定的进程执

4、行。运行在内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。运行在用户空间,执行用户进程。3.1inux内核的特点Linux内核属于单内核,以单个静态二进制文件的形式存放在磁盘,参见/boot冃录。运行在单独的内核地址空间。并具有以卜-特点:模块化设计抢占式内核(可满足较高的实吋耍求)支持内核线程支持对称多处理机制(SMP)可动态装载和卸载内核模块4.Linux内核版本进程管理1.进程的感念进程是Linix最基本的抽象之一,进程是处于执行期的程序以及它多包含的资源的总称。进程包含的资源有:一段可执行的程序代码(代码段

5、)存放全局变量得数据段打开的文件挂起的信号内核内部数据处理器状态地址空间一个或多个线程等进程称为processo进程的另一个名字是任务(task)。Linux通常进程叫做任务。2.线程的感念线程(thread)是在进程中活动的対象。每个线程都拥有一个独立的程序计数器,进程栈和一组进程寄存器。注意!Linux内核调度的对象是线程,而不是进程。对Linux而言,线程只不过是共享资源的特殊进3・进程描述符及任务结构task_struct在内核屮,通过一个特殊结构体task_struct來描述并管理-个进程,task_struct称为进

6、程描述符(processdescriptor),包含一个具体进程的所有信息,改结构定义在vlinux/sched.h>i

7、i。内核通过一个称为任务队列的双向循环链表将所有的task_struct组织起來。task_struc在32位机器上大约有1.7k字节。具屮包含的数据能够完整描述一个正在执行的程序:它打开的文件,进程的地址空间,挂起的信号,进程的状态,还有其它更多信息。参见sched.h中的structtask_struct定义。4.进程描述符的分配2.6内核以前,task_struct在内核中分配。2.6内核则通过slab

8、分配器分配。为了方便x86或者arm这种寄存器比较少的处理器可以快速查找到task.struct,2.6在进程的内核栈中分配一个新的结构thrcadjnfo,以方便通过栈指针找到task_struct的位置。内核提供一个唯一的进程标识符PID来表示每个进程。用隐含类型pid_t声明,实际就是一个int类型。PID的最大默认值为32768,可以修改/proc/sys/kernel/pid_max來提高上限。5通过current宏获得task_struct在内核中,可以通过宏current获得当前进程的task_struct□只要包

9、含了就可以使用current左。Current広定义在vasm/cuirent.h>Thread_info结构体和汇编级操作函数定义在6.进程状态进程描述符的state域描述了进程的当前状态。系

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。