程序、进程和线程的概念

1:程序和进程的差别

  进程的出现最初是在UNIX下,用于表示多用户,多任务的操作系统环境下,应用程序在内存环境中基本执行单元的概念。进程是UNIX操作系统环境最基本的概念、是系统资源分配的最小单位。UNIX操作系统下的用户管理和资源分配等工作几乎都是操作系统通过对应用程序进程的控制实现的!

  当使用c c++ java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行,运行的状态称之为进程。进程在用户看来是应用程序的执行过程,从操作系统来看,进程是操作系统分配的内存,cpu时间片等资源的基本单位,是为正在运行的程序提供的运行环境。进程与应用程序的区别是应用程序作为静态文件存储在计算机的硬盘等存储空间中,而进程则是处于动态条件下有操作系统维护的系统资源管理实体。

  进程概念和程序概念最大的不同的之处在于:

    1:进程是动态的,而程序是静态的

    2:进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进进程的程序不能作为一个独立得到操作系统的认可。

    3:一个进程只能对应一个程序,但一个程序可以对应多个进程。

2:Linux环境下的进程

  linux的进程操作方式主要有产生进程、终止进程,并且进程之间存在数据和控制交互,即进程间通信和同步。

  进程产生过程:

  

  进程的产生方式有很多种方式,但是其基本过程是一致的。

  (1)首先复制其父进程的环境配置。

  (2)在内核中建立进程结构。

  (3)将结构插入到进程列表,便于维护。

  (4)分配资源给此进程。

  (5)复制父进程的内存映射信息。

  (6)管理文件描述符和链接点。

  (7)通知父进程。

  进程的终止方式:

  有5种方式使进程终止:

1:从main函数返回。

  2:调用exit函数。

  3:调用_exit函数。

  4:调用abort。

  5:由一个信号终止。

  进程在终止的时候,系统会释放进程所有的资源,例如内存、文件符,内核结构等。

  注:exit和_exit的区别在于exit函数在系统调用exit之前要检查文件的打开情况,把文件缓冲区的内容写回文件。

  进程间的通信: 

  进程之间的通信有多种方式,其中管道、共享内存和消息队列是最常用的方式。

  1:管道是UNIX族中进程通信的最古老的方式,它利用内核在两个进程之间建立通道,它的特点是与文件的操作类似,仅仅在管道的一端只读,另一端只写。利用读写的方式在进程之间传递数据。

  2:共享内存是将内存的一段地址,在多个进程之间共享。多个进程利用获得的共享内存的地址来直接对内存进行操作。

  3:消息则是在内核中建立一个链表,发送方按照一定的标识将数据发送到内核中,内核将其放入量表后,等待接收方的请求。接收方发送请求后,内核按照消息的标识,从内核中将消息从链表中摘下,传递给收方。消息是一种完全的异步操作。

   进程间的同步:

  多个进程之间需要写作完成任务是,经常发生业务之间的依赖现象,从而出现了进程的同步问题。linux下的进程同步方式主要有消息和信号量等。

  信号量是一个共享的表示数量的值,用于多个进程之间操作或者共享资源的保护,它是进程同步的最主要的方式。

  3:进程和线程

  线程和进程是另一对有意义的概念,主要有以下区别和联系:

  1:进车是操作系进行资源分配的基本单位,进程拥有完整的虚拟空间。进行系统资源分配的时候,除了CPU资源外,不会给线程分配独立的资源,线程所需要的资源需要共享。

  2:线程是进程的一部分,如果没有进行显示的线程分配,可以认为进程是单线程的;如果进程中建立了线程,则可认为系统是多线程的。

  3:多线程和多进程是不同的,虽然二者都是并行完成功能,但是多个线程之间像内存,变量等资源在多个线程之间可以通过简单的办法共享,多进程则不同,进程间的共享方法是有限的。

  4:进程有进程控制表PCB(这个可不是指PCB板子哟),系统通过通过PCB对进程进行调度;线程有线程控制表TCB。但是TCB所表示的状态比PCB要少得多。

总之有以上关系可以看出线程是进程的一部分,进程是程序的一部分。

我曾经看过最直白的进程 线程与程序的比较,可以参考这个链接来加深理解        http://blog.jobbole.com/38696/#jtss-tsina

我不是计算机专业,对线程 进程的理解也算不上多深刻,这只是今天简单的看书后总结的!

2014-07-30      23:46:08

  

linux学习之进程,线程和程序的更多相关文章

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

    操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...

  2. Linux学习之进程管理(十九)

    Linux学习之进程管理 进程查看 查看系统中所有进程,使用BSD操作系统的格式 语法:ps aux 选项: a:显示所有前台进程 x:显示所有后台进程 u:显示这个进程是由哪个用户产生的 语法:ps ...

  3. python学习笔记-进程线程

    1.什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述 ...

  4. Linux学习之进程管理

    |-进程管理     进程常用命令        |- w查看当前系统信息        |- ps进程查看命令        |- kill终止进程        |- 一个存放内存中的特殊目录/p ...

  5. 【Linux学习】nohup后台运行程序以及输出重定向

    Linux有两种命令使程序后台运行 第一种:支持后台运行,但是关闭终端的话,程序也会停止 command & 第二种:支持后台运行,关闭终端后,程序也会继续运行 nohup command & ...

  6. Linux学习笔记22——线程属性(转)

    本文来自博客园:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/24/1764204.html 一.线程属性线程具有属性,用pthread_at ...

  7. linux学习笔记之线程同步机制

    一.基础知识. 1:线程同步机制:互斥量,读写锁,条件变量,自旋锁,屏障. 1,互斥量:每个进程访问被互斥量保护的资源时,都需要先对互斥量进行判断. 1)互斥量重要属性:进程共享属性,健壮属性,类型属 ...

  8. linux学习笔记之线程

    线程同步机制:http://www.cnblogs.com/zheng39562/p/4270019.html 一.基础知识 1:基础知识. 1,线程需要的信息有:线程ID,寄存器,栈,调度优先级和策 ...

  9. Linux学习-1进程

    在Linux中,在一个程序的内部启动另外一个程序,从而创建一个新进程. 1.这个工作可以通过库函数system来完成. #include<stdlib.h> int system (con ...

随机推荐

  1. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种: Map map = new HashMap( ...

  2. [Arduino] 基于Xbee Pro和网络技术的智能公交系统设计

    转自:http://www.21ic.com/app/rf/201112/99474.htm 引言 公共交通具有个体交通无法比拟的强大优势,优先发展城市公共交通系统是解决大.中城市交通问题的最佳途径. ...

  3. JD轮播图代码

    <!DOCTYPE html>   <html>   <head>   <title>jd网站的轮播图效果</title>   <me ...

  4. 设置eclipse在linux下提示

    在Windows下eclipse按alt+/就可以提示,但是在Linux下eclipse的设置不是这样的alt+/为切换输入法,如果要修改于Windows下的一样就需要修改一下快捷键: 点击windo ...

  5. Ubuntu下安装QT

    环境 Ubuntu 9.10 qt4.7.3 gcc 4.4 Ubuntu中缺少 make 首先安装  sudo apt-get install make 如果不知道缺少啥,就按下面的装 1.sudo ...

  6. Freebsd 下如何最有效率的安装软件

    FreeBSD的默认下载工具是fetch,既慢又不好用.在FreeBSD下安装软件有一些很有效率的方式,下面就给大家介绍一下. Ports机制 首先,FreeBSD下最有特色的软件安装和升级机制就是p ...

  7. OpenShare新功能@2014年第三季度

    新功能@2014第三季度 新增"多租户"的支持:巨型企业集团的私有云需要多租户模式,现在OpenShare可以从根本上完美支持 租户之间完全隔离,这是最高安全性 同时每个租户可以使 ...

  8. 利用 NUget包 EPPlus 实现数据导出到Excel(适用于MVC)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvoAAABpCAIAAADEEBBGAAAJdElEQVR4nO3cy2ob5wLA8TxKnqTrrr

  9. OC4_遵守多个协议

    // // Calulator.h // OC4_遵守多个协议 // // Created by zhangxueming on 15/6/24. // Copyright (c) 2015年 zha ...

  10. [javascript|基本概念|Number]学习笔记

    Number类型的值:整数/浮点数值 整数 十进制  e.g.: var intNum = 50; 八进制  (严格模式下无效,解析错误)字面值首位必须是0,之后的数字序列为0-7  e.g.: va ...