linux下进程和线程

前言

学习自用,这篇还比较没头绪,标题和内容很难对上

 

问题

子进程能继承父进程的什么东西?不能继承父进程的什么东西?

fork以后会生成一个task_struct,还会修改页表吧,每个线程还都有自己的thread_info,在栈的底部(应该是线程栈吧),其中有一个成员指针指向task_struct

信号处理函数不能继承,毕竟在子进程里对应的处理函数的地址是无效的(来自APUE),未决信号集也是不能继承的,

而task_struct存有被阻塞的信号集

线程独立的资源

linux内核并没有线程的概念. 每一个执行实体都是一个task_struct结构,,每个线程都有一个task_struct,

每个线程有独立的寄存器,如PC寄存器和栈指针,线程切换的时候也会现场保护就涉及到这些寄存器

线程中除了会用一个独立的线程栈,其余的内存区域都是共用的,比如堆,代码区,数据区

errno也是独立的(errno属于全局变量吗)

信号处理函数(参考资料5说是进程共享的?),信号屏蔽码也是独立的,这些也在task_struct里有记录,忽略的信号集,未处理的信号等

线程调度的优先级也是不一样的,这点与进程一样,PCB里就有记录相应的调度相关信息

而文件描述符是进程内共用的,进程通过PCB里面的struct files_struct *files位来存储打开了的文件描述符,里面有spinlock用来同步,还有个struct file *files_struct[] 数组指向所有打开的文件,每个struct file里也包含着dentry和spinlock等成员,

虽然task_struct是独立的,但是linux的线程设计成是共用文件描述符的,多线程服务器编程我们可以直接传递这个fd

线程和进程编程的选择

数据交互方面,多进程的数据传输需要额外的IPC,而线程的数据共享可以直接用堆区全局区做交换

数据交互会涉及到一个数据的同步,这个则是多进程占优(为什么?)

多进程的切换会比多线程的切换多一个页表的转换,与间接开销:页表的刷新

内存的占用也是多进程更高(为什么?),(好像线程的最大限制比进程的最大限制要更多吗)

多进程的调试一般比多线程复杂,

在一些语言里如cpp,一个线程异常退出会导致整个进程的崩溃,而多进程能保证可靠性

对于分布式,是多进程优势更大,拓展更好

内核空间

内核空间 内核空间总是驻留在内存中,它是为操作系统的内核保留的。内核空间按访问权限可以分为进程私有和进程共享两块区域。 进程私有的虚拟内存:每个进程都有单独的内核栈、页表、task_struct 结构以及 mem_map 结构等。 进程共享的虚拟内存:属于所有进程共享的内存区域,包括物理存储器、内核数据和内核代码区域。

内核态地址空间,分为,固定的映射区域,直接映射区,动态内存映射区

动态内存映射区用vmalloc来分配

永久内存映射区在32位系统是只能访问high memory的区域吧

vmalloc是通过修改vm_struct实现的

进程和线程

在Linux中线程编程符合Posix.1标准,称为Pthreads

内核线程:

内核线程由内核调度

内核线程的task_struct的mm位是空的(内核线程不是可以访问到所有地址吗)

参考资料1提到内核线程用active_mm来访问所有空间(为什么要多此一举)

所有的内核线程共享内核地址空间,linux下的每个进程或线程都有三个数据结构,thread_info,task_struct,内核栈

thread_info放在这个进程/线程内核空间的末尾,thread_info有个成员指向task_struct

用户线程

略,看另一篇

其他

用户线程和内核线程的区别,一个进程分为这两个部分,用户进程和内核进程不是独立的两个进程的意思,而是进程运行的不同状态。值得注意的是,用户进程不能访问内核虚拟地址空间,内核进程可以访问全部的虚拟地址空间,因此用户进程和内核进程进行数据交换只能通过内核进程从用户地址空间取数据,然后放入用户地址空间

TODO

  1. 进程和线程的应用场景,哪些场景适合用线程,哪些场景适合用进程
  2. 创建子进程,Linux的fork为什么比Windows高效?
  3. 进程栈和线程栈的区别?内核线程又是啥啊
  4. 内核线程是专门用来跑内核态任务的?为什么每个进程都有一部分内核态,所以每个进程都有内核线程?
  5. 参考资料5说道每个LWP都和其他的LWP共享资源,说的就是linux中的线程吧,
  6. 参考资料5提到了pthread是用户级线程,不太懂为什么用户级线程了pthread_create还会调用clone
  7. 结合用户线程和内核线程的好处,现在很多OS都是用户线程和内核线程的多对多实现是什么?

参考资料

  1. https://blog.csdn.net/qq_33883085/article/details/88799947
  2. https://www.cnblogs.com/lit10050528/p/6258656.html
  3. https://www.cnblogs.com/zhaoyl/p/3620204.html
  4. https://www.cnblogs.com/huang-y-x/p/10279506.html
  5. https://blog.csdn.net/rock_joker/article/details/72722008
  6. https://www.cnblogs.com/huang-y-x/p/10279506.html
  7. https://zhuanlan.zhihu.com/p/83398714内核空间
  8. https://www.cnblogs.com/alantu2018/p/8526916.html
  9. https://mp.weixin.qq.com/s/_MWR0tvSXNytm9rX70eLpw这个还有好多要消化
  10. https://www.cnblogs.com/sky-heaven/p/8204614.html多对多模型等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值