条件编译、Unix中C函数声明、变量存储类型、程序与进程

来源:互联网 发布:windows embedded 编辑:程序博客网 时间:2024/05/21 09:01

【UNIX操作系统教程尤晋元】
一、条件编译作用:
1.使得同一源程序在不同的编译条件下可以产生不同的目标代码文件
#ifdef identifier

 statements1
#else
 statements2
#endif
#ifndef identifier
 statements
#endif


2.调试程序时,需要插入调试语句,显示运行轨迹和中间结果,一旦调试结束,这些语句不再需要,可用条件编译实现,结束后将#define一行去掉即可。

 
二、UNIX中C语言的函数声明:
fun-name(变量名,……)
变量声明
{
 函数体
}
如:
power(x,n)
int n;
float x;
{
……
}

 

三、变量存储类型分成:
1.自动(auto):个函数内定义的变量一般为自动变量,自动变量作用范围现定于说明它的函数内,也称动态局部变量。


2.寄存器变量(register):为提高常用自动变量存访速度,变量个数受硬件限制,寄存器类型也可存于形参中

3.外部变量(extern):函数外定义的变量称为外部变量或全局变量,在同一源程序文件的外部变量定义点之前,或不同源程序文件中,如若使用这些变量,则需要extern声明,如extern int x;


4.静态变量(static):函数内定义说明的静态变量仍旧只在相应的函数内起作用,这一点与自动变量相同,但为静态变量分配的存储区是固定的,不随函数的开始、结束而来去,这一点与外部变量相似。静态外部变量的作用范围限于它所在的源程序文件内,其他源程序即使使用外部声明也不能使用,不同源程序可以使用相同的静态外部变量名,不会冲突。

 

四、单道程序的顺序执行:
a.封闭性:程序一旦开始运行,计算结果取决于程序本身,除了认为的改变机器的运行状态活机器故障外,没有其他因素能够对程序运行过程施加影响。
b.可再现性:当机器在同一数据集上重复执行同一程序时,机器内部的动作序列完全相同,结果也相同。

 

五、多道程序的并发运行:
a.资源共享:资源由多道程序共享,状态不再取决于一道程序
b.并发运行:

 

六、进程:多道程序环境下,一个程序不可能独占系统资源,程序和机器执行程序的活动之间不再有严格的一一对应关系,程序活动不再处在一个封闭系统中,而是和其他程序存在相互制约影响的关系,因而程序这一静态概念不能如实凡有程序活动的特征。进程概念随被提出。

 

七、进程和程序区别
a.进程是程序的一次运行活动,属于动态概念,程序是一种有序的静态指令,属于静态概念,进程是执行程序的动态过程,而程序是进程运行的静态文本,
b.一个进程可以执行一个或几个程序。
c.程序可以作为一个软件资源长期保存,而进程是一次执行过程,动态产生和终止。
d,进程需要使用处理机才能执行程序。

 

八、进程组成:程序和数据是进程存在的实体、物质部分。
a.程序:进程所完成的功能
b.数据集合:程序运行所需数据部分和工作区
c.进程控制块(进程描述块):进程的描述信息和控制信息,是进程动态特性的集中反映。

 

九、进程的状态
a.执行状态
b.就绪状态(可运行状态)
c.封锁状态(挂起状态或不可运行状态),如等待某一输入完成

 

十、进程通信
a.同步:一个进程到达某些点后,需要等待另一进程完成某次操作,否则不得不停下来等待这次操作执行结束,然后继续操作。这些进程相同工作。
b.互斥和临界区
a.临界资源:一次只允许一个进程使用的资源,如打印机等硬件,也有可能是变量,数据,表格,队列等
b.临界区:任一共享进程对临界资源的操作应该是互斥进行的,这种程序段称为临界区或互斥段

 

十一、进程通信方法

a.临界区互斥的锁操作法:a.关锁,b.执行临界区程序,c.开锁

b.信号量:1965年,Dijkstra提出一种解决同步、互斥的更一般方法,及信号量以及有关p,v操作。
信号量结构体:
struct semaphore
{
 int value;//信号量值;
 int *ptr_of_semuqe;//等待使用该信号量的进程队列队首指针;
 int quecode;//信号量队列管理算法编码说明;
}sem;
P(sem)操作:sem.value--;sem.value>=0,该进程继续运行,sem.value<0,该进程封锁,送入队列中,sem.value绝对值即为等待进程数。
V(sem)操作:sem.value++;sem.value>0,该进程继续运行;sem.value<=0,释放该信号量队列中的一个进程,使其转入就绪状态,调用本操作的进程继续执行。
P,V操作是整体实施,不能分割、相互穿插执行。可以实现同步和互斥。

 

十二、高级进程通信机构
P.B.Hansen首先提出的消息缓冲通讯机构:发送进程将在自己的内存空间申请一块内存区A,存储欲发送的消息及接受进程的进程名和消息长度,系统管理一组缓冲区B,每个缓冲区存放一个消息,所谓消息即为一组信息,发送进程申请一块缓冲区把信息写进去,接着把该缓冲区送到接受进程的消息队列中,接受进程在取用消息之前,先在自己内存区指定一个接受区,在接受区指向的缓冲区中读取消息,有时需要接受进程回答,通信过程类似。

原创粉丝点击