抢占式内核与非抢占式内核

2013-02-06 10:43 3269人阅读 评论(3) 收藏 举报

 分类:

【OS】(4) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

UNIX采用抢占式内核,Linux采用非抢占式内核

内核抢占(可抢占式内核):即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。

非抢占式内核:高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核

抢占式内核的意义:首先,这是将Linux应用于实时系统所必需的。实时系统对响应时间有严格的限定,当一个实时进程被实时设备的硬件中断唤醒后,它应在限定的时间内被调度执行。而Linux不能满足这一要求,因为Linux的内核是不可抢占的,不能确定系统在内核中的停留时间。事实上当内核执行长的系统调用时,实时进程要等到内核中运行的进程退出内核才能被调度,由此产生的响应延迟,在如今的硬件条件下,会长达100ms级。这对于那些要求高实时响应的系统是不能接受的。而可抢占的内核不仅对Linux的实时应用至关重要,而且能解决Linux对多媒体(video, audio)等要求低延迟的应用支持不够好的缺陷。

时间: 2024-10-13 22:24:15

抢占式内核与非抢占式内核的相关文章

抢占式内核与非抢占式内核中的自旋锁(spinlock)的区别

一.概括 (1)自旋锁适用于SMP系统,UP系统用spinlock是作死. (2)保护模式下禁止内核抢占的方法:1.执行终端服务例程时2.执行软中断和tasklet时3.设置本地CPU计数器preempt_count (3)自旋锁的忙等待的实际意义是:尝试获取自旋锁的另一个进程不断尝试获取被占用的自旋锁,中间只pause一下! (4)在抢占式内核的spin_lock宏中,第一次关抢占,目的是防止死锁(防止一个已经获取自旋锁而未释放的进程被抢占!!).而后又开抢占,目的是让已经释放自旋锁的进程可以

登录式shell和非登录式shell

在用户的角度,SHELL的类型有两种: 登录式shell: 正常通过某客户端登录 su - USERNAME  或  su -l USERNAME 非登录式shell: su USERNAME 图形终端下打开的命令窗口 自动执行的shell脚本 bash的配置文件: 全局配置: /etc/profile     , /etc/profile.d/*.sh    ,    /etc/bashrc 个人配置: ~/.bash_profile,    ~/.bashrc  profile类的文件: 设

登录式shell和非登录式shell的区别

在用户的角度,SHELL的类型有两种: 登录式shell: 正常通过某客户端登录 su - USERNAME  或  su -l USERNAME 非登录式shell: su USERNAME 图形终端下打开的命令窗口 自动执行的shell脚本 bash的配置文件: 全局配置: /etc/profile     , /etc/profile.d/*.sh    ,    /etc/bashrc 个人配置: ~/.bash_profile,    ~/.bashrc  profile类的文件: 设

[笔记]登录式Shell与非登录式Shell

登录式shell:        通过终端登录        su - USERNAME非登录式shell:        su USERNAME(用su切换用户,不带参数)        GUI下打开命令窗口        自动执行的shell脚本(使用at, crontab, anacron等) bash的配置文件:        全局配置:/etc/profile,/etc/profile.d/*.sh,/etc/bashrc        个人配置:~/.bash_profile,~/.

登录式shell与非登录式shell

登录式shell:su – usernamesu -l username 非登录式shell:su username图形终端下打开命令窗口自动执行的shell脚本 bash的配置文件全局配置:    /etc/profile,/etc/proflie.d/*.sh,/etc/bashrc个人配置:    -/.bash_profile,-/.bashrc profiles类配置文件:    设定环境变量,运行命令或脚本 bashrc类配置文件:    设定本地变量,定义命令别名 登录式shell

Java基础:非阻塞式IO

转载请注明出处:jiq?钦's technical Blog 引言 JDK1.4中引入了NIO,即New IO,目的在于提高IO速度.特别注意JavaNIO不完全是非阻塞式IO(No-Blocking IO),因为其中部分通道(如FileChannel)只能运行在阻塞模式下,而其他的通道可以在阻塞式和非阻塞式之间进行选择. 尽管这样,我们还是习惯将Java NIO看作是非阻塞式IO,而前面介绍的面向流(字节/字符)的IO类库则是非阻塞的,详细来看,两者区别如下: IO NIO 面向流(Strea

chapter9_4 非抢占式的多线程

协同程序与常规的多线程不同之处:协同程序是非抢占式的. 当一个协同程序运行时,是无法从外部停止它的.只有当协同程序显式地调用yield时,它才会停止. 当不存在抢先时,编程会变得简单很多,无须为同步的bug抓狂. 在程序中所有的同步都是显式的,只需要确保一个协同程序在它的临界区域之外调用yield即可. 对于这样非抢占式的多线程来说,只要有一个线程调用了一个阻塞操作,整个程序在该操作完成前,都会停止下来. 下面用一个有趣的方法来解决这个问题:通过HTTP下载几个远程文件. 下面的例子测试下载lu

FreeRTOS——任务调度—抢占式,时间片和合作式

本章教程为大家将介绍 FreeRTOS 操作系统支持的任务调度方式:抢占式,时间片和合作式,这部分算是 FreeRTOS 操作系统的核心了. 对于初学者来说,要一下子就能够理解这些比较困难,需要多花些时间把这些基本概念搞清楚,然后阅读下源码,深入理解实现方法. 关于合作式调度器的特别说明 FreeRTOS 支持的调度方式FreeRTOS 操作系统支持三种调度方式:抢占式调度,时间片调度和合作式调度. 实际应用主要是抢占式调度和时间片调度,合作式调度用到的很少. ? 抢占式调度每个任务都有不同的优

非阻塞式I/O

套接字的默认状态是阻塞的.这就意味着当发出一个不能立即完成的套接字调用时,其进程将被投入睡眠,等待相应的操作完成.可能阻塞的套接字调用可分为以下4类 (1)输入操作,包括read,readv,recv,recvfrom和recvmsg共5个函数.如果某个进程对一个阻塞的TCP套接字(默认设置)调用这些输入函数之一,而且该套接字的接收缓冲区中没有数据可读,该进程将被投入睡眠,直到有一些数据到达.既然TCP是字节流协议,该进程的唤醒就是只要有一些数据到达,这些数据既可能是单个字节,也可能是一个完整的