UNIX环境高级编程:进程管理和通信

进程和程序的区别:

进程: 程序的一次执行过程   动态过程,进程的状态属性会发生变化

程序:存放在磁盘上的指令、数据的有序集合  是个文件,可直观看到

程序program 静态的概念,本身不会发生变化。指令谁来执行,数据谁来访问?cpu!

但前提是cpu能够接触到,程序执行过程需要cpu、内存、以及相关的资源。

进程是动态的,需要执行时才创建,运行结束要回收,包括创建、调度、执行、消亡的过程。

二者是关系:无程序进程就无意义,是内容与形式的关系。

一个程序的执行,至少创建一个进程。

一个进程的内容 叫进程控制卡,PCB,它是个理论上的东西,不同的系统实现不一样,Linux里用task_struct 来描述

进程的特点:

动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的

并发性:任何进程都可以同其他进程一起并发执行

独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位

异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推。

进程通讯原因:

数据传输

资源共享

通知事件

进程控制

进程互斥:多个进程同时要访问一个共享资源时,同时只允许一个进程访问,直到访问结束,释放后其他进程才能访问。

临界资源:同一时刻只允许一个进程访问的资源,进程中访问临界资源的那段程序代码称为临界资源。

进程同步:一组并发的进程按一定的顺序执行,具有同步关系的一组并发进程为合作进程,合作进程间互相发送的信号称为消息或事件。

死锁:多个进程竞争一种资源而形成的一种僵局,若无外力作用,这些进程无法继续向前推进。解决方法:主要有预防,使进程访问资源的顺序一致。

进程的类型:

交互进程

批处理

守护进程

进程的状态

运行态(正在运行和准备运行的)

等待(可中断等待、不可中断等待)

僵尸态

停止态

时间: 2024-11-16 12:52:20

UNIX环境高级编程:进程管理和通信的相关文章

UNIX环境高级编程---标准I/O库

前言:我想大家学习C语言接触过的第一个函数应该是printf,但是我们真正理解它了吗?最近看Linux以及网络编程这块,我觉得I/O这块很难理解.以前从来没认识到Unix I/O和C标准库I/O函数压根不是一码事.Unix I/O也叫低级I/O,也叫Unbuffered I/O,是操作系统内核部分,也是系统调用:而C标准I/O函数相对也成Buffered I/O,高级I/O,一般是为了效率考虑对这些系统调用的封装.以前使用getchar()经常为输入完后的回车而出错.那是不理解标准I/O实现时的

unix高级编程-UNIX环境高级编程 times() 疑问

问题描述 UNIX环境高级编程 times() 疑问 例程 int main(int argc, char *argv[]) { clock_t s_clk,e_clk; struct tms s_tms,e_tms; s_clk = times(&s_tms); system("ls /dev"); system("date"); sleep(1); e_clk = times(&e_tms); printf("e_clk %ld - s

UNIX环境高级编程中的apue.h

/************** * *apueerror.h * *************/ #include <apue.h> #include <stdio.h> #include <errno.h> /* for definition of errno */ #include <stdarg.h> /* ISO C variable aruments */ static void err_doit(int, int, const char *, va

ubuntu-最近在学习Unix 环境高级编程,配置环境时遇到了些问题

问题描述 最近在学习Unix 环境高级编程,配置环境时遇到了些问题 最近再看APUE(UNix 环境高级编程)的第三版,照着教程在中配置环境.也就是想要运行书中的源码,则要安装 libbsd-dev包,而每次安装这个包时,都如上报错,请问各位大虾,该怎么解决呢? 解决方案 你好, 类似的问题我也遇到过 ubuntu下apt-get install安装软件, 报"无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系",今天终于找到解决方法了. 一般出现这种情况的原

unix环境高级编程-UNIX环境高级编程源代码对应

问题描述 UNIX环境高级编程源代码对应 今天开始学习UNIX环境高级编程,书中的源代码下载到了,但是发现根本不是按章节来的,找起来是相当的费时间,有哪位大神用过后知道他们的对应关系么,比如1-1对应ls1.c这样,真是万分感激,造福大家啊!

Mac OS X 10.8 中编译APUE(Unix环境高级编程)的源代码过程_C 语言

最近在温习APUE(<unix环境高级编程>),以前都是在linux下搞,现在打算在自己机器弄下,于是google了下,把编译的事情搞定了,修改了一些教程的一些错误,比如下载链接之类的. 1.下载源文件,我这里是第二版,貌似第三版的英文版出来了... 复制代码 代码如下: wget http://www.apuebook.com/src.2e.tar.gz 2.解压 复制代码 代码如下: tar zxf src.2e.tar.gz 3.修改些东西 复制代码 代码如下: cd apue.2e/

《UNIX环境高级编程(第3版)》——1.6 程序和进程

1.6 程序和进程 1.程序 程序(program)是一个存储在磁盘上某个目录中的可执行文件.内核使用exec函数(7个exec函数之一),将程序读入内存,并执行程序.8.10节将说明这些exec函数. 2.进程和进程ID程序的执行实例被称为进程(process).本书的每一页几乎都会使用这一术语.某些操作系统用任务(task)表示正在被执行的程序. UNIX系统确保每个进程都有一个唯一的数字标识符,称为进程ID(process ID).进程ID总是一个非负整数. 实例图1-6程序用于打印进程I

UNIX环境高级编程:线程属性之并发度

并发度控制着用户级线程可以映射的内核线程或进程的数目.如果操作系统的实现在内核级的线程和用户级的线程之间保持一对一的映射,那么改变并发度并不会有什么效果,因为所有的用户级线程都可能被调度到.但是,如果操作系统的实现让用户级线程到内核级线程或进程之间的映射关系是多对一的话,那么在给定时间内增加可运行的用户级线程数,可能会改善性能. pthread_setconcurrency函数可以用于提示系统,表明希望的并发度. #include <pthread.h> int pthread_getconc

UNIX环境高级编程:system V消息队列

unix早期通信机制中的信号能够传送的信息量有限,管道则只能传送无格式字节流,这远远是不够的. 消息队列(也叫报文队列)客服了这些缺点: 消息队列就是一个消息的链表. 可以把消息看作一个记录,具有特定的格式. 进程可以按照一定的规则向消息队列中添加新消息:另一些进程可以从消息队列中读走消息. 消息队列是随内核持续的,只有内核重启或人工删除时,该消息队列才会被删除. system V消息队列使用消息队列标识符标识.具有足够特权的任何进程都可以往一个给定队列放置一个消息,具有足够特权的任何进程都可以

UNIX环境高级编程:线程同步之互斥量

互斥量(也称为互斥锁)出自POSIX线程标准,可以用来同步同一进程中的各个线程.当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步. 互斥量,从字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用于保护临界区(共享资源),以保证在任何时刻只有一个线程能够访问共享的资源. 互斥量类型声明为pthread_mutex_t数据类型,在<bits/pthreadtypes.h>中有具体的定义. 1互斥量初始化和销毁 #include <pthread