其他分享
首页 > 其他分享> > os实验考前速成

os实验考前速成

作者:互联网

又到了一年一度的期末考试阶段,每到了这个阶段,菜菜就会瑟瑟发抖,当然我也是其中的一个。一看标题,咦,OS实验,这不是实验课,还考试?
是的,你没有看错,在这门课有对应的理论课的情况下,这门课的考核方式不是大作业,而是考试!!!
那没辙啊,咱也不敢说什么,该复习复习喽,就一边复习一遍做了张思维导图,不过有一点要说明的是,因为后面时间来不及了,所以最后面的几个写的就比较的简略了,以后看看吧,有时间的话考虑补一下。

先放张图片吧

可能有点糊,刚好Xmind可以导出成markdown,我就导出丢在下面了,就是看着挺乱的,我把xmind格式的文件放在最下面了,有需要的可以自己下。下载好后,可以装个xmind,或者貌似wps也可以导入打开的,这就自己去尝试吧!

文件点这里!!密码是:osos

操作系统原理实验

进程的创建和管理

进程的创建

pid_t fork(void);

头文件
#include<unistd.h>
#include<sys/types.h>
子进程拥有父进程的
PC
CPU寄存器
打开文件
返回值
父进程中
子进程中
ERROR
fork被调用一次,会返回两次结果
新进程创建完后,父子进程会调用下一条语句

获取进程标识号

pid_t getpid(void);

返回当前进程的PID

pid_t getppid(void);

返回当前进程父进程的PID

等待子进程终止

pid_t wait(int *status);

使父进程阻塞,知道子进程结束,如果没有子进程或子进程已经结束,会立刻返回
返回值
子进程的PID
Failure
头文件
#include<sys/wait.h>
#include<sys/types.h>

终止进程

void exit(int status);

孤儿进程

父进程退出,子进程仍在运行

僵尸进程

进程创建一个子进程,if子进程退出,父进程仍没有通过wait或者waitpid获取子进程的状态信息,那么子进程的进程描述符仍保存在系统中

关键语句

pid _t pid

pid=fork()

Wait(0)

Exit(0)

If (pid==0){……}

头文件

#include<sys/types.h

#include<sys/wait.h>

线程的创建与管理

头文件

pthread.h

链接

-lpthread

操作

定义线程

pthread_t p1;

创建新线程

Int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void (start_routine)(void *),void *arg)
参数
pthread_t *thread
const pthread_attr_t *attr
void (start_routine)(void *)
Void *arg
返回值
success
failure

线程终止

void pthread_exit(void *retval)
参数
retval
返回值
返回一个指向某个对象的指针

进程等待

int pthread_join(pthread_t thread,void **retval)
说明
以阻塞的方式等待thread指定的线程结束
参数
thread
retval
返回值
success
failure

互斥锁

互斥锁初始化
静态互斥锁
动态互斥锁
锁定
P操作
pthread_mutex_lock(&mutex)
释放
V操作
pthread_mutex_unlock(& mutex)

关键语句

fflush(stout)

强迫缓冲区内的数据写回

pthread_create(&t1,NULL,p_msg,(void*)”hello”)

pthread_create(&t2,NULL,p_msg,(void*)”world”)

pthread_join(t1,NULL)

pthread_join(t2,NULL)

pthread_mutex_t mutex;

定义互斥锁

pthread_mutex_init(&mutex,NULL)

初始化互斥量

pthread_mutex_lock(&mutex)

gnum++;sleep(1);gnum++;

Gnum++几次取决于MAX(i)-1

pthread_mutex_unlock(&mutex)

POSIX信号量

Linux信号量

内核信号量

用户态信号量

POSIX信号量
有名信号量
无名信号量
SYSTEM V信号量

一种用于提供不同进程间或给定一个进程的不同线程间的同步手段的原语

头函数

semaphore.h

操作

信号量初始化

int sem_init(sem_t *sem,int shared,unsigned int value)
参数
sem_t *sem
int pshared
unsigned int value
返回值
success
ERROR

信号量减一操作

int sem_wait(sem_t *sem)
参数
等待信号量
返回值
success
failure

信号量加一操作

int sem_post(sem_t *sem)
说明
释放信号量,让信号量的值加一,若此时有sem_wait操作正在阻塞,则唤醒,相当于v操作

获取信号量的值

int sem_getvalue(sem_t *sem)

关键语句

#include<semaphore.h>

Sem_t sem_id

Sem_wait(&sem_id)

Sem_post(&sem_id)

Sem_init(&sem_id,0,1)

Sem_getvalue(&sem,&val)

信号

信号是一种异步通信的处理机制

分类

OS标准信号

用户进程自定义信号

信号和中断

相同点

相同的异步通信方式

不同点

中断有优先级,信号没有
信号处理程序在用户态下运行,中断处理程序在内核态下运行
中断响应及时,信号相应通常有很大的延迟

功能

发送信号

预置对信号的处理方式

收受信号的进程按事先规定完成对相应时间的处理

事件

信号注册

信号发送

信号处理

信号注销

不可靠信号量

1-31

可靠信号量

31-64

头函数

signal.h

操作

设置信号处理方式

方式一
void (signal(int signum,void( handler),void(* handler)(int)))(int)
signal()依照signum指定的信号编号来设置改信号的处理函数
信号到达时,会跳转到handler指定的函数执行
方式二
int sigaction(int signum,constituting sigaction *act,struct sigaction *oldact))
改变进程接受到特定信号后的行为

向任何进程或者进程组发送任何信号

kil(pid_t pid,int sig)
参数
pid
sig

新的发送信号系统调用

int sigqueue(pid_t pid,int sig,const union sigval Val
参数
pid
sig
val

定时发送

unsigned int alarm(unsigned int seconds)

获取定时器状态

int getitimer(int which,struct itimerval *value)

设置定时器

int setitimer(int which,struct itimerval *value,struch itimerval *ovalue)

进程暂停知道信号出现

int pause(void)

向自身所在的进程发送一个信号

int raise(int signs)

关键语句

(Void)signal(SIGINT,SIG_DFL)

恢复SIGINT信号的处理操作

signal(SIGINT,ouch)

#include<signal.h>

Signal(SIGALRM,handler)

Alarm(3)

Struct itimerval value

Kill(getppid(0,SIGALRM)

Pause()

Setitimer(ITIMER_REAL,&value,&ovalue)

sigqueue(pid,sig,mysigval)

向本进程发送信号,并传递附加信息

sigemptyset(&act.sa_mask)

Carl-C 变为输出一条消息

共享内存

共享内存允许两个或多个进程共享一定的存储区域,是一种最快的IPC(进程通信)

头函数

sys/ipc.h

Sys/types.h

Sys/shm.h

操作

shmid=shmget(KEY,SIZE,IPC_CREATE|0600)

创建共享内存
返回
success
ERROR

shmaddr=(char*)shmat(shmid,NULL,0)

返回共享内存的起始地址

shmdt(shmaddr)

断开连接

shmctl(shmid,cmd,NULL)

cmd
IPC_STAT
IPC_SET
IPC_RMID
共享内存管理

信号量(system V)

头文件

sys/types.h

ipc.h

sem.h

操作

semget(key,users,sem flg)

新建,返回信号量集对象

semop(shmid,sops,sops)

PV操作

semctl(semis,semnum,cmd,arg)

信号量控制操作

消息队列

头函数

sys/types.h

sys/msg.h

sys/ipc.h

操作

msgget(key,msgfig)

创建

msgsnd(msgid,(void*)sone_date,SIZE,0)

发送消息到消息队列

msgrcv(msgid,(void*)sone_date,SIZE,typ,0)

从消息队列中读取消息

msgctl(msgid,IPC_STAT,&buf)

完成指定操作

管道

头函数

unistd.h

操作

建立管道

int pipe(int filedes[2])

read()

write()

本文同时发表在CSDN中,链接:https://blog.csdn.net/tangkcc/article/details/118460199

标签:考前,int,void,速成,信号量,pthread,进程,sem,os
来源: https://www.cnblogs.com/tangkc/p/14968595.html