操作系统-线程与进程

首先要分清楚进程和线程的区别。

借用《操作系统概念》的一幅图:

线程由线程ID、程序计数器、寄存器集合和栈组成。

进程由代码段、数据段、文件、线程组成。

可以想象成一个进程可以有多个线程。而每个线程可以共享进程里面的代码段、数据段等。

举个例子。

#include <stdio.h>
#include <pthread.h>
static int counter = 0;
void*
mythread(void* arg)
{    int i;    for (i = 0; i < 10; i++) {
        counter = counter + 1;
    }
   return NULL;
}
int
main(int argc, char*argv[])
{
    pthread_t p1, p2;
    // 创建两个线程
    Pthread_create(&p1, NULL, mythread, "A");
    Pthread_create(&p2, NULL, mythread, "B");
    // 等待创建的两个线程完成
    Pthread_join(p1, NULL);
    Pthread_join(p2, NULL);
    return 0;
}


简单解释一下:首先将整个程序看成一个进程,一开始进入main函数看成一个线程T,然后线程T用Pthread_create创建了两个线程A,B,即一个进程内包含了三个线程。线程A,B执行mythread这个函数,当它们执行完这个函数也就结束了。线程T等待线程A,B完成,然后就线程T结束。在理解这个程序过程中,把线程的执行想象成在一定时间后(例如1s)就会执行另一个线程,也称为抢占调度。如图
以下是线程每部分解释:static int counter = 0;counter属于数据段,可以说全局变量都是数据段的一部分。mythread(void* arg)mythread这个函数属于代码段,上面所有函数都是属于代码段,包括main函数。那么,如果我用Pthread_create创建线程A时,线程A是可以得到mythread和counter这两个共享资源的,线程B,T也是一样,如果线程A改变了counter的值为1,那么再调度到线程B的时候执行counter = counter+1, counter就变为2了。但值得注意的是,mythread里面的变量i是局部变量,存放在每个线程各自的里面,所以是不共享的。另外,如果我在线程T里改变了寄存器%eax的值,%eax=1,在1s后调度到线程A,它也改变了%eax的值,%eax=2那么再回到线程T的时候%eax是会恢复到原来的值即%eax=1,换句话说每个线程的寄存器是相互独立的。所以线程与进程之间的不同就很简单了。线程与进程其实差不多,而不同在于,前者是可以在同一进程内共享数据、内存地址空间,后者要通过进程间通信或者地址空间映射来共享数据。此外,它们在上下文切换(例如线程调度)的时候保存的数据有点不同的。
时间: 2024-07-31 14:30:23

操作系统-线程与进程的相关文章

[操作系统] 线程和进程的简单解释

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2. 假定工厂的电力有限,一次只能供给一个车间使用.也就是说,一个车间开工的时候,其他车间都必须停工.背后的含义就是,单个CPU一次只能运行一个任务. 3. 进程就好比工厂的车间,它代表CPU所能处理的单个任务.任一时刻,CPU总是运行一个进程,其

操作系统中作业、线程、进程、内存管理、垃圾回收以及缓存等概念

作业:用户在一次解题或是一个事务处理过程中要求计算机系统所做的工作的集合.它包括用户程序.所需要处理的数据以及控制命令等.作业是由一系列有序的步骤组成. 进程:一个程序在一个数据集合的一次运行过程.所以一个程序在不同数据集合上运行,乃至一个程序在同样的数据集合上的多次运行都是不同的进程. 线程:线程是进程中的一个实体,被系统独立调度和执行的基本单位. 管程:管程实际上是定义了一个数据结构和在该数据结构上的能为并发进程做执行的一组操作,这组操作能同步进程和改变管程中的数据. 操作系统中作业.线程.

操作系统中的进程与线程

操作系统中的进程与线程 转自:http://www.cnblogs.com/CareySon/archive/2012/05/04/ProcessAndThread.html 简介 在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程.但是,现在的情况更多的情况下要求在同一地址空间下拥有多个线程并发执行.因此线程被引入操作系统. 为什么需要线程? 如果非要说是为什么需要线程,还不如说为什么需要进程中还有其它进程.这些进程中包含的其它迷你进程就是线程. 线程之所以说是迷你进程,是因为

erlang进程与操作系统线程

erlang多进程与多线程: 在erlang开发中,我们面对的最小执行单位是进程,当然这个进程并不是系统层面上的进程,也不是线程.而是基于erlang运行时系统的一个进程.那么erlang的多进程是如何变成系统级别上的多线程,进而被多核处理器处理呢? 其实,我们每启动一个erlang VM,实际上就启动了模拟器+erlang运行时系统.而每个erlang运行时系统会启动N个进程调度器,每个进程调度器都是一个独立的操作系统线程.这个调度器会处理一个进程池,进程池里面是M个erlang进程.也就是说

《现代操作系统》笔记——进程和线程1

转载请注明: TheViper http://www.cnblogs.com/TheViper  进程 在任何多道程序设计系统中,cpu由一个进程快速切换至另一个进程,使的每个进程运行各运行几十或几百毫秒.严格的说,在某一瞬间,cpu只能运行一个进程,但在一秒期间,它可能运行了多个进程,这样就产生了并行的错觉.这就是所谓的“伪并行”,以此来区分多处理器系统(有两个或更多cpu共享同一物理内存)的真正硬件并行. 进程模型 在进程模型中,所有可运行的软件,通常也包括操作系统,被主组织成若干顺序进程.

操作系统(10 线程和进程的区别 --非法操作)

1.并发执行:多进程和多线程. 2.  apache 和 iis 对比(多进程和多线程的之间区别) apache 是多进程实现的,iis是多线程实现的. 区别: 1>效率上:线程效率比进程效率高. 2>稳定性:线程和进程比,线程不稳定,一个线程出现问题,多个线程一起出现问题.而进程是独立的,有自己独立的空间. 3>安全性:进程是隔离的,单独的.线程之间可以互相访问 3.平时会遇到一些非法操作,非法操作的原理是? 因为操作系统分为两个态,用户只能存在于用户态,不能越界到内核态.只要用户越界

操作系统笔记之进程与线程

背景 操作系统设计的7个主题:1. 进程描述和控制2. 内存管理3. 调度4. I/O和文件管理5. 并发和分布式系统6. 嵌入式系统7. 安全 操作系统利用一个或多个处理器的硬件资源,为系统用户提供一组服务,还代表用户来管理辅助存储器和I/O设备. CPU中断的分类:1. 程序中断2. 时钟中断3. I/O中断4. 硬件失效中断 DMA:直接内存存取 概述 典型计算机系统的三个重要接口:1. 指令系统体系结构ISA2. 应用程序二进制接口ABI3. 应用程序编程接口API 进程 三个部分:1.

操作系统学习笔记----进程/线程模型----Coursera课程笔记

操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进程创建.撤销.阻塞.唤醒.... 0.2 线程模型 为什么引入线程 线程的组成 线程机制的实现 用户级线程.核心级线程.混合方式 1. 进程的基本概念 1.1 多道程序设计 允许多个程序同时进入内存运行,目的是为了提高CPU系统效率 1.2 并发环境与并发程序 并发环境: 一段时间间隔内,单处理器上

操作系统学习之进程和线程

为什么会有进程 进程是一个计算机工程概念,进程包含一个程序运行的所有资源.进程提供程序的抽象 一个独立的逻辑流 一个私有的地址空间 逻辑控制流 如果使用调试器调试一个程序,就能看到一些列的(PC),这些PC的序列就是逻辑控制流. 并发流 一个逻辑流的执行在时间上与另一个流重叠,成为并发流,多个流并发地执行的一般现象称为并发.简单理解为同时做多件事. 并行: 一般出现在多个CPU上. 多任务: 一个进程和其他进程轮流运行的概念. 时间片: 一个进程执行他的控制流的每一时间片段. 私有地址空间 进程