UNIX上机实验10笔记

1.在Linux系统中,除编号为1的进程(init进程)外,其它进程都有对应的父进程

2.通常进程的pid会被顺序编号,即新创建的进程pid通常为前一个进程的pid加1.但是Linux系统上pid的取值范围是有限的,因此若当前进程的pid已为最大值,系统创建下一个进程的pid就必须使用闲置的数值。

3.uid:用户标识符,即创建这个进程的用户表示;
euid:有效用户标识符,即以有效权限发起进程的用户

4.gid,egid和uid,euid的定义类似,不过前者是组,后者是用户

5.进程标识符与函数接口:(注意,pid_t这些都是宏定义,实质是unsigned int)
在这里插入图片描述

6.进程的状态被划分为5种:初始态,就绪态,运行态,睡眠态和终止态

7.睡眠态分为不可中断睡眠和可中断睡眠。不可中断睡眠是由外部I/O调用等造成的睡眠,此时该进程正在等待所需的I/O资源,即便强制中断睡眠状态,进程仍无法运行,这种睡眠态亦可称为阻塞;当进程处于可中断睡眠态时,往往是因为进程对应的当前用户请求已处理完毕,因此暂时退出CPU,当用户再次发出请求时,该进程可以被唤醒,这种睡眠态也被称为挂起。

在这里插入图片描述

9.拿播放音乐举个例子,虽然实际上用户只启动了一个进程,但用户启动的这个进程会主动启动各种实现功能所需的附加进程,此时这些进程被视为同一个进程组中的进程,进程组由用户启动的进程创建,用户启动的进程是进程组中的领导进程。进程组中领导进程的pid亦是识别进程组的进程组id,即pgid.

10.会话是进程组的集合,会话中的每个进程组称为一个工作,会话由其中的进程创建,创建会话的进程称为会话的领导进程,会话领导进程的pid也是标识会话的会话id,即sid.

11.使用pstree命令可以查看当前系统中的进程树。进程树的顶端是进程init

12.线程是系统调度分配的最小单位,进程是系统资源分配的最小单位。总之,线程是系统调度,进程是系统资源。同一个进程中的线程共享进程的资源,比如内存,打开的文件,甚至可能是网络连接。

13.虽然属于同一进程的克隆进程可以共享相同的内存空间,但它们不能共享相同的用户堆栈。因此,clone()调用为每个进程创建单独的堆栈空间。

14.多线程之间可能需要互斥的访问一些全局变量,这就需要互斥地访问。这些需要共享访问的字段被称作临界资源,访问临界资源的程序段被称为临界区。

=============================题目==================================

2.⼀个程序中分别创建5个线程,按顺序打印数字1-5。因为要确保按照顺序,所以要进⾏⼀定程度的同步。

//代码
#include<stdio.h>
#include <stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include <pthread.h>
#define thread_num 5
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;  
void *thread_handler(void *a);
int main()
{
    pthread_t tid[thread_num];
    for(int i=0;i<thread_num;i++){
	pthread_create(&tid[i],NULL,thread_handler,&i);
	pthread_join(tid[i],NULL);//这个函数的作用就是把主线程挂起,等我们创出来的子线程执行结束后在接着执行主线程的for循环
    }
}
void *thread_handler(void *a){
    pthread_mutex_lock(&mutex);
    int i=*(int*)a;
    i++;
    printf("%d\n",i);
    pthread_mutex_unlock(&mutex);
}

执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值