linux学习之进程,对Linux进程的理解

在本科期间学习过进程,网上也有很多关于进程的知识,但对于进程到底是什么一直没有让我满意的解答(以下截图来自网络,感觉对进程理解有问题,说得也很虚)。

linux学习之进程,线程和程序,linux学习进程线程

                                                                                  程序、进程和线程的概念

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要少得多。

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

我曾经看过最直白的进程 线程与程序的比较,可以参考这个链接来加深理解       

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

                                                                                                                                                                                                                                        2014-07-30      23:46:08

  

 

图片 1图片 2

麻烦解释一下linux下进程与线程有什不同与联系,linux下多线程与多进程通信的实现方法,通俗解释

区别和联系:
1、进程是独立运行的实体,有独立的资源分配;
2、同一进程的线程之间共享进程的资源;
3、所有的进程至少有一个执行线程;
4、线程的创建和切换代价比进程的小;

线程间的通信方法:
1、同一进程的线程之间通信的最简单办法就是使用全局变量;
2、不同进程的线程之间通信需要通过下面进程间的通信来实现;

进程间的通信方法:
1、管道
2、信号量
3、共享内存
4、消息队列
5、套接字  

但今天找到这个博文感觉挺符合我的胃口:

Linux编程与进程、线程

给你举个例子:
比方电脑里你安装的qq,暴风,迅雷他们都可以单独独立运行,那么我们就可以说qq是一个进程,暴风也是一个进程,迅雷更是一个进程
而要说到什么是线程,线程是运行在进程里里的程序
举例qq(线程),我们能同时用qq软件进行聊天,听音乐,为什么呢,这就是线程的优点所在,单独运行但又不互相干扰,创建线程有两种方法,线程一定要复写run方法,用start启动线程

使用Thread创建线程:
public MyThread extends Thread{
public void run(){
for (int i=0; i<20; i ){
System.out.println(
“my Thread i value: ” i);
}
使用Runnable创建线程:
public MyThread implements Runnable{
public void run(){
for (int i=0; i<20; i ){
System.out.println(
“my Thread i value: ” i);
}

对于这两种方法,实现线程,但是一般情况下我们都用第二种
因为第一种是用继承的关系,而第二种为实现接口
但是相对于第一种,第二种我们还可以另外继承类,来扩展功能,所以编程序时比较趋向于用实现的方法写线程
给你一个完整的例子:
class MyThread implements Runnable{
private int ticket = 5 ; // 假设一共有5张票
public void run(){
for(int i=0;i<100;i ){
if(ticket>0){ // 还有票
System.out.println(Thread.currentThread().getName() "卖票:ticket = " ticket-- );
}
}
}
};
public class SyncDemo01{
public static void main(String args[]){
MyThread mt = new MyThread() ; // 定义线程对象
Thread t1 = new Thread(mt) ; // 定义Thread对象
Thread t2 = new Thread(mt) ; // 定义Thread对象
......余下全文>>  

程序、进程和线程的概念 1:程序和进程的差别 进程的出现最初是在UNIX下,用于表示多用...

 

  • 进程的本质

进程是Linux内核提供的一个环境(资源分配的基本单位),包括:

(1)进程控制块(用于操作系统对进程的管理)。

(2)虚拟内存(分为好几段:正文段、数据段、BBS段、堆栈段等等)。

图片 3

(3)其他内核资源(打开的文件等等)。

 

  • 进程和可执行文件的关系

前面说了,进程有正文段和数据段等,这些都是从磁盘上的可执行文件加载而来(可以通过size命令查看可执行文件分段信息)。

所以:可执行程序为进程提供必要的代码和数据等。

 

  • 进程和线程的关系

有很多关于 进程和线程的区别及联系 的文章,但大部分和我的理解不一样。以下是我的个人理解。

(1)进程提供了环境,为谁提供?答案就是线程。进程提供资源,线程干活。

(2)进程是资源分配的基本单位,线程是CPU调度的基本单位。(有人说线程是进程的实体,我不知该怎么理解)

(3)进程创建后默认就有一个初始线程存在,以后在该进程中创建的线程都会共享进程提供的环境。

 

本文由星彩网app下载发布于星彩网app下载,转载请注明出处:linux学习之进程,对Linux进程的理解

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。