| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> linux系统调用yield和pause进程让出cpu -> 正文阅读 |
|
[系统运维]linux系统调用yield和pause进程让出cpu |
道生一,一生二,二生三,三生万物。 linux进程每个进程对应一个 linux操作系统不会区分线程和进程,线程也是通过进程来实现的。进程是资源管理的最小单元,线程是程序执行的最小单元。 进程有独立的资源,进程fork出来的子进程继承父进程资源。fork()后父子进程拥有相同内容的代码段、数据段和用户堆栈,实际上是父进程克隆复制了自己的PCB块。 子进程从父进程继承的资源有:用户/组号、进程组号、env,堆栈、共享内存、当前/根目录、打开的文件描述符、信号等。 子进程独有进程号、文件描述符、不继承异步输入和输出、不继承进程正文数据和memory locks。 这里感兴趣的话可以继续研究一下,fork()和vfork()父子进程执行顺序问题,及其他区别。 0 号进程是无中生有出来的,是所有进程的祖先,是为道。 1号init进程是内核启动的用户级进程,引导进程,init是第一个进程,是为一。 ?2号kthreadd进程是内核线程的父进程or祖先进程,是为二。 在编写内核驱动代码的时候,会经常用到kthread_create函数,其核心是使用kthread_create_list全局链维护kthread。常见的pthread_create、pthread_join、pthread_exit为用户态线程函数。 所以进程都是通过其他进程创建出来的,整进程组织架构看起来是一个树。 进程调度yield系统调用yield、pause让出cpu。 运行在用户态的进程,想实现一些更底层的操作,可以通过syscall进入到内核态。 yield系统调用就会使当前进程让出cpu,进行syscall系统调用。
系统调用通过SYSCALL_DEFINE0定义,x表示参数个数。
schedule()函数是内核中进程调度的入口。 下面我们来看看?
pause系统调用先把进程设置为TASK_INTERRUPTIBLE状态,ask_struct结构体对应的state 标记为TASK_INTERRUPTIBLE后,后续进程调度中就会过忽略这个进程,选择其他进程进行调度。同样schedule()函数是内核中进程调度的入口。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 19:35:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |