《操作系统》基本课程实验指导书-2014

发布时间 : 星期六 文章《操作系统》基本课程实验指导书-2014更新完毕开始阅读

来的jiffies数目了。

5、源程序代码清单(参考)

#define MODULE #include #include #include #include #include #include #include #include #include #include

struct proc_dir_entry *proc_pf;

struct proc_dir_entry *proc_pfcount, *proc_jiffies;

extern unsigned long jiffies, pfcount;

static inline struct proc_dir_entry *proc_pf_create(

const char* name, mode_t mode,

get_info_t *get_info)

return create_proc_info_entry(

name, mode,

proc_pf, get_info);

}

int get_pfcount(char *buffer, char **start, off_f offset, int length) {

int length =0;

length = sprintf(buffer, \ return length; }

int get_jiffies(char *buffer, char **start, off_f offset, int length) {

int length =0;

length = sprintf(buffer, \ return length;

}

int init_module(void) {

proc_pf =proc_mkdir(\

proc_pf_create(\ proc_pf_create(\ return 0; }

void cleanup_module(void)

{

remove_proc_entry(\ remove_proc_entry(\ remove_proc_entry(\

6. 进程通信

6.1 实验5.1 观察实验

1、实验目的与内容

在Linux下,用ipcs()命令观察进程通信情况,了解Linux基本通信机制。

2、实验原理

Linux IPC继承了Unix System V及DSD等,共有6种机制: 信号(signal)、管道(pipe和命名管道(named piped)、消息队列(message queues)、共享内存(shared memory segments)、信号量(semaphore)、套接字(socket)。 本实验中用到的几种进程间通信方式:

(1)共享内存段(shared memory segments)方式

– 将2个进程的虚拟地址映射到同一内存物理地址,实现内存共享

– 对共享内存的访问同步需由用户进程自身或其它IPC机制实现(如信号量) – 用户空间内实现,访问速度最快。

– Linux利用shmid_ds结构描述所有的共享内存对象。 (2)信号量(semaphore)方式

– 实现进程间的同步与互斥 – P/V操作, Signal/wait操作

– Linux利用semid_ds结构表示IPC信号量 (3)消息队列(message queues)方式

– 消息组成的链表,进程可从中读写消息。 – Linux维护消息队列向量表msgque,向量表中的每个元素都有一个指向msqid_ds结

构的指针,每个msqid_ds结构完整描述一个消息队列

LINUX系统提供的IPC函数有: ? msgget(关键字,方式):创建或打开一个消息队列

? msgsnd(消息队列标志符,消息体指针,消息体大小,消息类型): 向队列传递消息 ? msgrcv(消息队列标志符,消息体指针,消息体大小,消息类型): 从队列中取消息

? msgctl(消息队列标志符,获取/设置/删除,maqid_ds缓冲区指针): 获取或设置某

个队列信息,或删除某消息队列

Linux系统中,内核,I/O任务,服务器进程和用户进程之间采用消息队列方式,许多微内核OS中,内核和各组件间的基本通信也采用消息队列方式.

6.2 实验5.2 代码分析

1、实验目的

通过分析Linux中相关模块调用主线的代码结构,了解模块调用机制。

2、实验内容

阅读 Linux/Minix中以下模块的调用主线,并写出分析报告

? kill系统调用内部实现模块调用主线 ? pipe系统调用内部实现模块调用主线

3、实验结果示例

进程的创建: #include #include #include int main () { }

pid_t pid; pid = fork (); if (pid == 0) { }

printf (\pid = fork (); if (pid == 0) {

printf (\

} else {

} else { printf (\}

return 0;

kill命令调用主线:

先向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。

管道间通信: #include #include

联系合同范文客服:xxxxx#qq.com(#替换为@)