操作系统中.PDF

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统中

操作系统中 系统调用的 必要性与实现 Version 0.01 谢煜波 Email:xieyubo@ 前记 这段时间的确太忙了,有很长一段时间没有动笔写报告了,这段时间 pyos 的开发也基 本上处与半停滞状态,前两天刚建了一个 pyos 的 cvs ( ),希望已后 的开发可以稍微高效一点~~~ :) 近来没做什么东西,只完成了一个系统调用的实验,言归正传,下面我还是来介绍一 下我的这个实验吧。 实验综述 与 操作系统中系统调用的必要性 每一个操作系统都有一个很重要的组成部份,这就是系统调用。操作系统通过系统调 用为各个进程提供服务,而各个进程也通过相应的系统调用取得操作系统服务。系统调用是 连接各个应用程序与操作系统的桥梁,是它们之间的交互界面,也是对程序的编译链接具有 直接影响。最常见的一个系统调用就是内存分配函数(如 C 语言的 malloc ),这个函数将返 回一块内存的指针给应用程序。简单的一看,好像系统调用与普通函数没有什么分别,但要 是仔细看一看,就会发现它们之间还是有相当大的分别的。 下面让我们来看一看另外一个系统调用的例子,屏幕输出函数(如 C 语言的 printf ), 并以此来说明系统调用与一般的函数有什么不同。 下面我们来看看一般的函数是怎样编写的: void myprint( char ch ) { static int x_pos = 0 ; // 记录当前光标的x位置,初始等于0 static int y_pos = y ; // 记录当前光标的y位置,初始等于0 output( x_pos , y_pos , ch ) ; // 在屏幕的x_pos与y_pos输出字符ch, // output是一个虚拟的函数,在我们的讨论中,它就可 // 以用来输出,至于它内部是怎么实现的,我们暂且不 // 用理会 ++x_pos ; // 因为输出了一个字符,所以光标应自动下移一个位置,以便在打印新 // 来的字符的时候,不会覆盖掉原来的字符 } 上面的这段代码看似完全没有问题,但下面我们考虑,有两个程序 A 和 B,它们都使用 了这个普通函数,于是当它们被载入内存中的时候就会出现如下图所示的情形: myprintf 的 从右图中我们可以很明显的看到,在这种情况下,A 和 B A 内存空间 都含有 myprintf 这个函数一份独立的拷贝,也即 A 和 B 均使 的 用其自身的 x_pos 与 y_pos 定位当前光标位置。于是这就出现 内 x_pos 的空间 了这样一个问题: 存 y_pos 的空间 假设 A 先运行,x_pos 与 y_pos 被初始化为 0,这是A 打印了 空 五个字符,那么,x_pos 的值应当为 5,而这时轮到 B 运行了, 间 其余部分空间 由于B使用的是自身的x_pos与y_pos,因此这时对于B来说, x_pos 与 y_pos 的值仍是 0,于是 B 将在(0,0)位置开始打 印其字符,也就是说,B 运行的结果会覆盖先前 A运行的结果。 那么我们再想一想,在 DOS或 Linux等系统中,你先运行一个 ………………………….. 程序,再运行第二个程序,第二个程序会覆盖第一个程序的运 myprintf 的 行结果吗

文档评论(0)

ldj215323 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档