`

linux进程和线程的clone 创建。和线程调度

阅读更多
[b]Linux下进程和线程的创建都是通过clone实现的. clone函数功能强大,带了众多参数,
clone可以让你有选择性的继承父进程的资源,你可以选择想vfork一样和父进程
共享一个虚存空间,从而创造的是线程,你也可以不和父进程共享,你甚至可以选
择创造出来的进程和父进程不再是父子关系,而是 兄弟关系[/b]


pthread_create是基于clone实现的, 创建出来的其实是进程, 但这些进程与父进程共享很多东西,
共享的东西都不用复制给子进程, 从而节省很多开销, 因此,这些子进程也叫轻量级进程(light-weight process)

在linux中线程就是轻量级的进程
fork后, 子进程复制哪些东西
一句话总结, 就是所有 writeable 的东西都会复制.包括:
堆,栈, 数据段, 未初始化数据段, 打开的文件描述符,
信号安装过的handler, 共享库, ipc(共享内存,消息队列,信号量)
注意未决信号不会继承过来, 新进程会重置它的未决信号链 
子进程和父进程共享哪些东西
一句话总结, 就是所有 read-only 的东西都不用复制, 父子进程共享, 包括:
正文段和字符串常量 
哪些东西, 子进程不会从父进程继承
进程id, 各种锁(内存锁,文件锁), 定时器, 未决信号 


在操作系统中。一个用户级的线程如果对应一个系统级线程,就可以充分利用linux多核的特性。
但是在早期的linux版本中,linux用户级进程的多个线程对应一个系统级的进程,不能充分利用操作系统的特性!
分享到:
评论

相关推荐

    Linux进程、线程和调度(2)

    Linux进程、线程和调度是操作系统领域中的重要概念,涉及到程序执行、资源管理和并发控制等核心问题。在Linux操作系统中,进程和线程是进行并发操作的基本单位,而调度则是操作系统控制进程和线程执行的方式。下面将...

    Linux进程、线程和调度(3)

    在讲解Linux进程、线程和调度的时候,我们首先需要了解几个核心概念: 1. **进程和线程**:进程是程序的一次执行,拥有自己的地址空间、文件句柄、系统资源等。线程是进程中的一个执行单元,共享进程的大部分资源,...

    1. Linux 进程、线程与调度1

    在Linux中,进程和线程的创建并无本质区别,都是通过`do_fork()`系统调用来实现。然而,它们在资源的共享程度上有所不同,这一点主要体现在`clone()`系统调用的`flags`参数上。 线程的创建通常会使用`clone()`函数...

    内核线程和进程的区别

    在Linux内核中,并没有专门的线程调度算法或者数据结构来区分线程和进程。每一个进程或线程,在内核中都是通过一个task_struct结构来表示的,这是进程描述符,包含了进程的状态、优先级、指向地址空间等重要信息。...

    嵌入式Linux应用程序开发第9章多线程编程

    通过学习本章,读者将掌握 Linux 中线程的基本概念、线程的创建和使用、线程属性的设置、多线程程序的编写、同步与互斥问题的处理等。 九、Linux 线程概述 Linux 线程是进程内独立的一条运行路线,处理器调度的...

    Linux下的线程

    在Linux环境下,线程作为轻量级进程(lightweight process)的一种实现,是操作系统调度的最小单位,相较于进程,线程具有更低的资源消耗和更快的创建速度,以及更简便的线程间通信能力。在同一个进程中,线程共享...

    linux 线程进程经典文章

    然而,随着对线程模型的需求增加,尤其是对于SMP系统的支持,Linux内核后续版本引入了NPTL(Native Posix Thread Library),它提供了一个更接近POSIX标准的线程实现,包括更高效的线程调度和信号处理机制。...

    linux多线程编程ppt

    内核线程则允许跨进程的线程调度,更好地利用多处理器系统。 多线程编程涉及到的关键点包括: 1. **线程创建**:通常使用`pthread_create()`函数创建新线程,指定线程函数和参数。 2. **线程属性设置**:可以设置...

    Linux内核分析与应用课件第3章(二)进程的创建.pdf

    Linux内核对待进程、线程和内核线程采取平等的原则,即使用唯一的数据结构task_struct来表示它们,并使用相同的调度算法对这三者进行调度。 在用户态函数库中,创建进程和创建线程调用了不同的函数,分别为fork()和...

    L5 Linux进程管理1

    Linux进程管理是 Linux 操作系统中一个非常重要的概念,它控制着系统中的进程资源分配和调度。本章节将从 Linux 进程概念、进程控制块 task_struct 结构、Linux 进程的创建、Linux 进程调度等方面进行详细介绍。 ...

    Linux系统的线程技术.pdf

    `clone()`系统调用是Linux中创建线程的关键,它允许创建一个新的进程,同时共享父进程的资源。在系统调用的实现中,如示例代码所示,会处理新的栈空间分配和进程上下文切换。 总的来说,Linux系统的线程技术通过...

    打通Linux脉络系列:进程、内存与IO111.pdf

    当使用`pthread_create`创建线程时,实际上是通过`clone()`系统调用完成的,设置特定的标志位(如`CLONE_VM`、`CLONE_FS`等)来实现资源共享和独立调度。 #### 总结 本文详细介绍了Linux操作系统中关于进程、内存与...

    linux线程启动

    本文详细介绍了Linux线程启动的相关概念和技术细节,包括进程控制表、进程状态、多任务流程、用户进程与内核线程的区别、内核线程的创建与管理、信号处理以及同步机制等方面的内容。通过理解这些核心概念,可以帮助...

    linux系统多线程编程

    线程是操作系统调度的基本单位,相比于进程,线程的创建和销毁更快,上下文切换的开销更小,因为它们共享同一进程的内存空间和资源。 Linux线程概述: 1. **线程定义**:线程是进程内的一个执行实体,是处理器调度...

    Linux系统进程讲解.pdf

    从【部分内容】中提供的信息来看,虽然文字因为OCR技术原因出现了一定程度的混乱,我们可以从中识别出与Linux进程相关的一些技术术语,并对它们进行解读和讲解。 1. IO(输入/输出):在进程管理中,IO是一个至关...

    超多的linux线程编程的书籍

    除了pthread库,Linux还提供了其他线程相关的系统调用,如`clone()`、`fork()`和`exec()`等,这些调用可以用来创建进程和线程,但它们通常比pthread库更底层,使用起来也更为复杂。 在进行Linux线程编程时,需要...

    Linux多线程编程.doc

    2. 创建线程:使用`pthread_create()`函数,传入线程属性、启动函数和参数,由内核调用`__clone()`创建新线程。 3. 执行线程:新线程的执行始于`pthread_start_thread()`,并在函数返回后调用`pthread_exit()`释放...

    Linux线程机制研究.pdf

    线程的创建和管理是通过线程库和内核的紧密协作来完成的,涉及到诸如线程管理器pthread-manager-thread、初始线程pthread-initial-thread以及线程请求处理pthread-manager-request等组件。 线程与进程的关系: 在...

Global site tag (gtag.js) - Google Analytics