对Linux线程进程的个人理解

0 对Linux线程进程的几点个人理解

事情太多,好久没写博客了。接触Linux也有几年时间了,虽然因为各种原因不能一直专心来研究Linux,但也做了不少了解,几分心得体会暂且记下,日后再补。

1.1 进程线程创建

Linux的进程创建方式和Windows很不一样,Windows对进程和线程创建有着明确的界定,分别用CreateProcess和CreateThread。Linux使用fork或clone,一般的步骤为:1.fork()2.exec()。也即后者一般会在fork之后载入可执行文件,但两者并无关联,只是一种惯用方法。Linux调用fork或clone最终都是调用do_fork来实现,通过不同的flag(clone_flags)和不同的标志参数(CLONE_VM)来区分创建进程还是线程。

1.2 任务与task_struct

在Linux上,进程和线程都被看成是“任务”,无论是进程还是线程,都在栈中有自己独立的task_struct数据结构,其中最重要的用来保存任务信息的是thread_union数据结构,其低地址存放当前进程/线程信息,高地址存放内核栈。因此,从内核角度来看,进程线程都是任务,线程也是进程,从这个角度来理解就是:在Linux下区分线程进程的区别/关系主要是看父子进程资源共享程度,线程只是进程间资源共享(通信)的一种手段而已。

1.3 线程进程哪家强

既然存在的,那就是合理的,线程进程各有优缺点。线程开销小,单不利于资源管理和保护;进程相反但开销大。线程适合在SMP机器上运行,进程可是跨机器迁移(网络通信一般使用进程,但现在的新技术推荐用线程取代一部分进程来通信)。

2 任务(task_struct)与内存管理

2.1 task_struct的mm字段及mm子字段中的数据结构和操作方法提供了内存管理需要的功能,包括页表,虚拟内存区,地址映射,挂载点等等,而这些又与slab和buddy,连续与续连续内存管理联系在一起。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值