linux
来源:互联网 发布:为什么知乎回答很慢 编辑:程序博客网 时间:2024/06/05 14:14
2.6之前不支持内核抢占,支持用户抢占。
用户态抢占必须等内核代码运行完毕,返回用户态前夕。
内核抢占是在内核代码运行期间,内核态里其他代码间互相抢占。
内核态抢占发生时机:
1.中断调用返回,need_resched == 1,
2.内核从不可抢占变为可抢占preempt_count(这个是持有锁个数) ==0,也是隐式调用schedule()
3.内核任务显示调用schedule,主动放弃cpu
4.内核任务被阻塞,显示调用schedule
判断是否可以抢占:
1.当前任务不持有锁。也就是thread_info结构体中的preempt_count==0
内核抢占,在很多地方还是为了保护临界区资源而需要临时性的禁用内核抢占
不可抢占情况很多,先说几个
内核不可以抢占情况:
1.中断
2.当期进程持有锁
3.内核正在调用schedule函数
4.内核正在处理每cpu私有数据
任务调度时机:
1.当前进程变为非可执行
2.抢占:当前任务时间片用完 or 高优先级任务就绪
linux 将所有的线程都当作进程来实现。
在linux2.6之前,内核并不支持线程的概念,仅通过轻量级进程(lightweight process)模拟线程
在linux2.6之后,为了完全兼容posix标准,引入了线程组的概念(仍然用轻量级进程表示线程),有了这个概念就可以将一组线程组织称为一个进程,如此通过这个改变,linux内核正式支持多线程特性。
系统调用clone创建子进程时, 可以有选择性地让子进程共享父进程所引用的资源. 这样的子进程通常称为轻量级进程,又叫内核线程。
linux2.6前,用轻量级进程模拟线程,只实现了posix线程5点要求的1点;
linux2.6,引入了线程组的概念,真正实现了posix线程所有的5点要求;但还是用轻量级进程模拟线程。
- linux
- linux
- Linux
- Linux
- LINUX!
- Linux
- linux
- linux
- linux
- Linux
- linux
- linux
- linux
- linux
- Linux
- linux
- linux
- Linux
- HDU-1576 A/B
- 300. Longest Increasing Subsequence -Medium
- android中selector的用法
- Atitit java读取tif文件为空null的解决 图像处理
- codeves天梯 明明的随机数
- linux
- python抽象-类
- 博客第一天
- Atitit codeblock c++开发环境建立attilax总结
- SpringBoot集成MyBatis
- Atitit 摄像头与主机连接方式大总结
- servlet单实例多线程模式
- K短路新姿势
- Maven Web项目创建