操作系统原理实验

实验3: 进程的创建和管理 P11

  1. <sys/types.h><unistd.h>
  2. pid_t fork()
    1. 创建出一个新进程(与原先的及其类似); 返回值: 对父进程返回子进程号,子进程得到0
  3. pid_t getpid()
    1. 得到自己的进程号
  4. pid_t wait(int *status) <sys/wait.h>
    1. 等待子进程终止,返回: 子进程号
    2. status: 子进程结束的状态,写0即可
  5. void exit(int status)
    1. 进程退出,一般用于子进程退出
    2. status: 退出的状态; 0: 正常
  6. unsigned int sleep(unsigned int seconds)
    1. 线程休眠指定的时间(s)

实验4: 线程的创建和管理 P20

  1. <pthread.h>
  2. int pthread_create( pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
    1. 创建新线程
    2. thread: 指向进程标识符指针,即进程ID
    3. attr: 设置属性, NULL默认
    4. 进程运行函数的起始地址
    5. 传给线程启动函数的参数
  3. void pthread_exit (void *retval)
    1. 线程终止
    2. retval: 线程停止的状态, 通常为NULL
  4. int pthread_join( pthread_t thread, void **retval)
    1. 开启进程
    2. thread: 线程标识符
    3. 存储返回值
  5. int pthread_mutex_init( pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)
    1. 初始化互斥锁
    2. 获得互斥锁
    3. 互斥锁的初始值, 一般为NULL
  6. int pthread_mutex_lock( pthread_mutex_t *mutex)
    1. 锁定(获取)互斥锁, 相当于P操作
  7. int pthread_mutex_unlock( pthread_mutex_t *mutex)
    1. 解除(释放)互斥锁, 相当于V操作

实验5: POSIX信号量 P29

  1. <semaphore.h>
  2. int sem_init( sen_t *sem, int pshared, unsigned int value)
    1. 信号量初始化
    2. sem: 信号量
    3. pshared: 信号量类型, 0: 只在当前进程共享
    4. value: 初始值
  3. int sem_wait( set_t *sem)
    1. –, 相当于P操作
    2. sem: 信号量
  4. int sem_post( set_t *sem)
    1. ++, 相当于V操作
    2. sem: 信号量
  5. int sem_getvalue( set_t *sem)
    1. 得到信号量的值
    2. sem: 信号量

实验6: 进程通信-信号 P41

  1. <signal.h>
  2. void ( *signal( int signum, void( *handler)( int)))( int)
    1. 给指定的信号添加行为(函数)-1
    2. signum: 某信号量
    3. handler: 处理函数, 可以自己写, 也可以用已经定义好的; 如 SIG_IGN|SIGDFL: 忽略|指定回默认值
  3. int signaction( int signum, const struct sigaction *act, struct sigaction *oldact)
    1. 给指定的信号添加行为(函数)-2
    2. signum: 信号值
    3. act: 新的处理
    4. oldact: 原先的处理
  4. int kill( pid_t pid, int sig)
    1. 发送信号-1
    2. pid: 发送对象
    3. sig: 信号值
  5. int sigqueue( pid_t pid, int sig, const union sigval val)
    1. 发送信号-2
    2. pid: 发送对象
    3. sig: 信号
    4. val: 信号参数
  6. unsigned int alarm( unsigned int seconds)
    1. 定时发送SIGALRM信号
  7. int getitimer( int which, struct itimerval *value)
    1. 获取定时器状态
  8. int setitimer( int which, struct itimerval *value, struct itimerval *ovalue)
    1. 获取定时器状态
  9. int pause()
    1. 让进程暂停直到信号出现
  10. int raise( int signo)
    1. 向自身所在的进程发送一个信号

实验7: 进程通信-共享内存 P55

  1. <sys/types.h><sys/ipc.h><sys/shm.h>
  2. int shmget( key_t key, size_t size, int shmflg)
    1. 得到|创建 共享内存标识符
    2. key: 共享内存标识符,0为新建
    3. size: 内存大小,若key!=0 则size=0
    4. shmflg: 权限
  3. void *shmat( int shmid, const void *shmaddr, int shmflg)
    1. 连接共享内存
    2. shmid: 共享内存标识符
    3. shmaddr: 指定共享内存的位置
    4. shmflg: 权限
  4. int shmdt( const void *shmaddr)
    1. 断开共享内存
    2. shmaddr:连接的共享内存的起始地址
  5. int shmctl( int shmid, int cmd, struct shmid_ds *buf)
    1. 完成对共享内存的控制
    2. shmid
    3. cmd: IPC_STAT|IPC_SET|IPC_RMID:得到状态|修改状态|删除共享内存
    4. buf: 共享内存结构体

实验8: 进程通信-信号量 P67

  1. <sys/types.h><sys/ipc.h><sys/sem.h>
  2. int semget( ket_t key, int nsems, int senflag)
    0… 得到信号量集
    1. key:信号量集标识符,0为新建
    2. size: 信号量个数
    3. shmflg: 权限
  3. int semop( int semid, struct sembuf *sops, unsigned nsops)
    1. 完成对信号量的 P|V 操作
    2. semid: 信号量集标识符
    3. sops: 信号量集结构体首地址
    4. 进行操作的信号量的个数
  4. int semctl( int semid, int semnum, int cmd, union semun arg)
    1. 得到|创建 信号量集
    2. semid: 信号量集标识符
    3. semnum: 某个信号量的下标
    4. cmd: 命令,
    5. arg:

实验9: 进程通信-消息队列 P81

  1. <sys/types.h><sys/ipc.h><sys/msg.h>
  2. int msgget( ket_t key, int senflag)
    1. 创建消息队列
    2. key: 消息队列的键值
    3. 消息队列的建立标志和存取权限
  3. int msgsnd( int msgid, const coid *msgp, size_t msgsz, int msgflg)
    0.向消息队列发送消息
    1. msgid:
    2. msgp:
    3. msgsz:
    4. msgflg:
  4. ssize_t msgrcv( int msgid, void *msgp, size_t msgsz, long msgtyp, int msgflg)
    1. 从消息队列接受消息
    2. msgid:
    3. msgp:
    4. msgsz:
    5. msytyp:
    6. msgflg:
  5. int msgctl( int msgid, int cmd, struct msqid_ds *buf)
    1. 在消息队列上执行指定操作
    2. msgid:
    3. cmd:
    4. buf:

实验10: 进程通信-管道 P92

  1. <unistd.h>
  2. int pipe( int filedes[2])
    1. 申请管道, 管道的值将放在传入的指针中; 使用 'close(filedes[0])'关闭读取端,1关闭输入端;
    2. filedes: 存放读写,0读取,1写入

当没有读取端时,输入端也将无效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值