操作系统的时间virtual虚函数的实现是怎么实现的

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
操作系统与实现第一章.doc 29页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
操作系统与实现第一章
你可能关注的文档:
··········
··········
【作者简介】:
安德鲁.坦尼鲍姆分别在麻省理工学院和加州大学伯克利分校获得学士和博士学位。他现任位于荷兰阿姆斯特丹市的Vrije大学计算机科学教授并领导着一个计算机系统研究小组。同时他还任一个研究并行、分布及图像系统的校际研究生院 - 计算机与图像高级学院的院长。
坦尼鲍姆先前的研究领域包括编译器、操作系统、网络和局域分布式系统,他现在的研究主要集中在可扩展到数百万用户的广域分布式系统。对这些课题的研究使他在学报和会议上发表了70余篇论文,并出版了五部专著。
坦尼鲍姆教授同时还主持开发了大量的软件。他是Amsterdam编译工具箱的总设计师,该工具箱被广泛地用来开发可移植的编译器,同时还用于MINIX的开发。他和他的博士研究生及程序员们一起设计了一个基于微内核的高性能分布式操作系统 - Amoeba。现在,以教学和研究为目的的用户可以从Internet上免费获得MINIX 和Amoeba软件。
坦尼鲍姆的许多博士研究生在获得学位后都取得了非常丰硕的成果,这令坦尼鲍姆非常自豪,因为这是他诲人不倦的结果。
坦尼鲍姆教授同时还是ACM的会士、IEEE高级会员、荷兰皇家艺术和科学院院士,他曾获得1994年ACM Karl V. Karlstrom 杰出教育奖和1997年ACM/SIGCSE 计算机科学教育杰出贡献奖。他被列入Internet上的 Who's Who in the World 名单,他在WWW上的主页地址为:http://www.cs.vu.nl/~ast/。
阿尔伯特.伍德豪尔分别在麻省理工学院和华盛顿大学获得学士和博士学位。他进麻省理工学院本来是想成为一名电气工程师,可是后来却成了生物学家。从1973年起他开始在位于麻省Amherst的Hampshire自然科学学院工作。当微型计算机慢慢多起来的时候,作为使用电子检测仪器的生物学家,他开始使用微型计算机。他给学生开设的检测仪器方面的课程逐渐演变为计算机接口和实时程序设计。
伍德豪尔博士对教学和科学技术的发展有浓厚的兴趣,在进入研究生院之前他曾在尼日利亚教过两年中学,近年来他曾几次利用自己的假期在尼加拉瓜教授计算机科学。
他对计算机作为电子系统,以及计算机与其他电子系统的相互配合很感兴趣。他最喜欢讲授的课程有计算机体系结构、汇编语言程序设计、操作系统和计算机通信。他还为开发电子器件及相关软件担当顾问。
在学术之外,伍德豪尔有不少兴趣,包括各种户外运动,业余无线电制作和读书。他还喜欢旅游和学习别国语言。他的WWW主页就存在一台运行MINIX的机器上,地址是:/asw/。
多数操作系统教材都重理论而轻实践,本书希望在这二者之间求取较好的平衡。本书详细论述了操作系统的所有基本概念,包括进程、进程间通信、信号量、管程、消息传递、调度算法、输入/输出、死锁、设备驱动程序、存储器管理、页面调度算法、文件系统设计、安全与保护机制等。同时,本书也详细讨论了MINIX - 一个与UNIX兼容的操作系统,并提供了完整的源代码供学习之用。这样的安排使读者不仅学习到理论,而且能够理解它们如何应用在一个实际的操作系统之中。
本书第一版在1987年出版时,曾引发了操作系统课程教学的一场小小的变革。在此之前多数课程都只讲理论。随着MINIX的出现,许多学校开始增加实验环节以使学生了解实际的操作系统是如何运作的。我们认为这种趋势是可取的,并希望通过本书第二版能进一步加强这种趋势。
MINIX在其出现以来的十年间发生了许多变化,最初的代码是为基于8088芯片、256K内存和两个软驱的IBM PC机型编写的,它基于UNIX 版本7。随着时间的推移,MINIX在许多方面有所发展,比如当前版本可运行在众多机型上,从16位实模式的PC机到配有大容量硬盘的奔腾机(32位保护模式),而且它不再基于UNIX版本7,而是基于国际上的POSIX标准(POSIX 1003.1和ISO9945-1)。与此同时,有许多新特征被添加到MINIX中,在我们看来,所增加的特征可能已经太多了,但有些人则认为还不够,这最终导致了LINUX的诞生。MINIX还被移植到许多其他平台上,包括Macintosh、Amiga、Atari和SPARC。本书只涉及MINIX2.0,到目前为止,该版本只能运行于基于80X86的机器,或者可模拟此类CPU的机器,以及SPARC机器。
与第一版相比,第二版有许多变化,原理性部分基本都被修改过,同时增加了大量新内容。最主要的变化是新的基于POSIX的MINIX,以及对其源代码的剖析。另外,每本书都附带一张CD-ROM,它包含了全部MINIX源代码,以及在PC上安装MINIX的说明(见CD-ROM主目录下的README.TXT文件)。
在一台80X86 的PC机上安装MINIX
正在加载中,请稍后...我们编程时候会用到很多函数,在此基于鄙人肤浅的认识。先对他们分下类。
一:C运行时库函数 &&C++运行时库函数 &
这些东西只要是安装编译器 ,比如VC VC++之类的玩意 都会自带的。
二:API函数
API函数是操作系统为方便用户设计应用程序而提供的实现特定功能的函数,API函数也是C语言的函数实现的。
WIN32 API也就是MicrosoftWindows32位平台的应用程序编程接口,微软的操作系统和苹果的操作系统提供的API估计是不一样的。
三:系统开发框架库
比如什么MFC & QT 这些玩意 &,他们为了把一些常见的功能 使用&C运行时库函数 &&C++运行时库函数 &&API函数实现一下,然后封装成函数。
供开发者调用。
四:其他应用级别的库。 比如慧都上面卖的那些控件 大都是基于以上C运行时库函数 & C++运行时库函数&API函数开发的。
我估计啊,只要CPU的指令集类似,C的代码是完全跨平台的。但是API则不同,API函数是操作系统的提供的函数。
不论什么函数 ,玩出什么样的花样来,最终还是要靠汇编实现的。
C语言是一门语言 ,C++是C语言的加强版。 &不过C库 C++库和 不是语言,而是用语言开发出的函数的集合。
API函数集是由操作系统或开发环境提供的,以DLL的形式出现。
其中有三个最主要的动态连接库:Windows内核库(Kernel32.dll)、Windows用户界面管理库(User32.dll)、Windows图形设备界面库(Gdi32.dll),这些动态连接库共同构成了Win32 API函数。Windows内核库(Kernel32.dll):所有底层的核心功能如任务管理、内存管理,进程线程文件管理等的函数都在这个动态连接库中;Windows用户界面管理库(User32.dll):窗口管理,菜单管理以及通信等相关函数都在该动态连接库中;Windows图形设备界面库(Gdi32.dll):集合了关于图形设备的所有函数。所有这三个动态连接库中的函数原型说明都在头文件windows.h中声明,所以在使用API进行编程序的时候别忘了包括该头文件。
当然了,这只是主要的三个动态连接库,其他比较常用的还有网络服务(Winsock32.dll)、多媒体服务(Winmm.dll)等等。
&&&&&&&&&&&&&&
由于鄙人能力较浅,如有总结不对的地方 请多多提醒。
阅读(...) 评论()博客访问: 146674
博文数量: 20
博客积分: 1422
博客等级: 上尉
技术积分: 235
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
标准C库中只有获取系统时间的API,好像还没有设置系统时间的API,本文将谈谈如何在linux和windows平台设置系统时间,最后给出一个与平台无关的设置系统时间的封闭函数。
一、Linux下设置系统时间:
1.Linux下设置系统时间的函数有好几个,先来看看最常用的stime()函数,这个函数只能精确到秒。
_SVID_SOURCE /*如果你使用的是glib2的话,必须先定义这个宏才能使用*/
int stime(time_t
参数说明:
t是以秒为单位的时间值,从GMT1970年1月1日0时0分0秒开始计算。
成功返回0,错误返回-1,errno错误码,EFAULT表示传递的参数错误,如时间值是无效的值,EPERM表示权限不够,注意只有root用户才有修改系统时间的权限。如果要让普通程序修改系统时间,可以先切换到root用户操作,修改完成后,再切换到普通用户,或者用命令chmod +s给执行文件加上root用户的权限。
2.linux是如何管理时间的?
在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔11分钟会将系统时间写入CMOS,同步时间。从这可以看出,获取系统时间有两个途径,一种是从CMOS中读,一种是从系统中读,但修改时间却只有一种,即修改linux系统中的时间,而修改CMOS中的时间是无效的,因为CMOS中的时间会被定时重写掉。另外还有一点要注意,修改了系统时间并不是马上生效的,假如你修改了系统时间并马上关机,再开机的时候,时间还是原来的,因为修改的时间还没有来得及写入CMOS中。
3.通过settimeofday()函数来设置系统时间,这个函数设置的精度可以精确到微秒。
&sys/time.h&
settimeofday(const struct timeval *tv , const struct timezone *tz);
struct timeval {
&&& time_t&&&&& tv_&&&& /* seconds */
&&& suseconds_t tv_&&& /* microseconds */
struct timezone {
&&& int tz_&&&& /* minutes west of Greenwich */
&&& int tz_&&&&&&&& /* type of DST correction */
tz参数为时区,时区结构中tz_dsttime在linux中不支持,应该置为0,通常将参数tz设置为NULL,表示使用当前系统的时区。该函数是glib中的,但在mingw中没有实现。
该函数返回值与stime()一样,同样也需要root权限。
4.设置CMOS时间,其实它是通过RTC(Real-time clock)设备驱动来完成的,你可以用ioctl()函数来设置时间,当然也可以通过操作/dev/rtc设备文件,在此就不详细说明了。
二、windows下设置系统时间
1.设置当前时区的时间
&winbase.h&
SetLocalTime(const SYSTEMTIME* lpSystemTime);
typedef struct
_SYSTEMTIME {& // st&
&&& WORD wY
&&& WORD wM //月份从1开始
&&& WORD wDayOfW //SetLocalTime()不使用这个参数
&&& WORD wD
&&& WORD wH
&&& WORD wM
&&& WORD wS
&&& WORD wM
} SYSTEMTIME;
函数成功返回非零,失败返回零。注意要求调用进程必需有SE_SYSTEMTIME_NAME权限。
2.另外还有一个函数SetSystemTime(),它的参数与SetLocalTime一样,只不过以UTC时区为基准的。
SetSystemTime(const SYSTEMTIME* lpSystemTime);
二、一个封装的设置系统时间的函数
//设置成功返回true,否则返回false
&&&&&& bool
set_local_time(struct tm& t)
#ifdef _WIN32
&&&&&& SYSTEMTIME
&&&&&& memset(&st, 0, sizeof(SYSTEMTIME));
&&&&&& st.wYear = t.tm_year + 1970; //注意struct tm结构中的年是从1970年开始的计数
&&&&&& st.wMonth = t.tm_mon + 1; //注意struct tm结构中的月份是从0开始的
&&&&&& st.wDay = t.tm_
&&&&&& st.wHour = t.tm_
&&&&&& st.wMinute = t.tm_
&&&&&& st.wSecond = t.tm_
&&&&&& if(!SetLocalTime(&st))
&&&&&&&&&&&&&
&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&&& return
&&&&&& #else
&&&&&&&&&&&&& //将struct tm结构时间转换成GMT时间time_t
&&&&&&&&&&&&& struct
&&&&&&&&&&&&& st
= mktime(&t);
&&&&&&&&&&&&& if(st==-1)
&&&&&&&&&&&&&&&&&&&& return
&&&&&&&&&&&&& if(!stime(st))
&&&&&&&&&&&&&&&&&&&& return
&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&&& return
阅读(9497) | 评论(0) | 转发(2) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 4464 人关注过本帖
标题:求助一下:设置系统时间的函数到底是什么
来 自:大草原
等 级:贵宾
威 望:27
帖 子:1253
专家分:5982
结帖率:92.13%
&&已结贴√
&&问题点数:10&&回复次数:10&&&
求助一下:设置系统时间的函数到底是什么
最近照着《百例课堂delphi7编程入门篇》做实例
前面的一些例子,都得到正确的结果了
但做到设置系统时间这个例子的时候,点了按钮没结果
例子实现步骤大概是这样的:
窗体上放一按钮,双击输入代码,如下:
程序代码:
procedure TForm1.Button1Click(Sender: TObject);
yourtime:T
&&with yourtime do
&&& wyear:=<font color=#9;
&&& wmonth:=<font color=#;
&&& wday:=<font color=#;
&&& whour:=<font color=#;
&&& wminute:=<font color=#;
&&& wsecond:=<font color=#;
getsystemtime(yourtime);
我反复对照了几遍,代码应该没错,但运行程序点按钮就是没反应
照着输入了其他几个函数SYSTEMTIME,和setsystemtimeadjustment,都报错
换了getsystemtime,还是没反应
百度了一下,换了SetLocalTime,也没反应。
哪位懂,给个解释吧,谢谢!
补充:win7 64位   delphi xe5环境
搜索更多相关主题的帖子:
等 级:新手上路
setsystemtime和setlocaltime
测试环境一:Win7 64位 delphiXE5 两个函数都可以改变系统时间
测试环境二:Win7 64位 Delphi7&&& 两个函数都可以改变系统时间  把编译的程序复制到虚拟机的XP里
测试环境三:WinXP&&setsystemtime可以改变系统时间&&setlocaltime没试 应该也可以吧
总结,系统时间真的被改变了
说了,不如不说的,那就不说;说了,等于没说的,还是不说。横批:爱说不说!
来 自:大草原
等 级:贵宾
威 望:27
帖 子:1253
专家分:5982
。。。时间确实被改了。。。
追问:那点击按钮怎么才能蹦出时间设置框呢?
报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
来 自:大草原
等 级:贵宾
威 望:27
帖 子:1253
专家分:5982
电子书上明明是说:在弹出的日期和时间对话框中可以看出系统时间被重新设置
[ 本帖最后由 不懂才问 于
07:19 编辑 ]
报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
来 自:大草原
等 级:贵宾
威 望:27
帖 子:1253
专家分:5982
附件: 您没有浏览附件的权限,请
报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
来 自:大草原
等 级:贵宾
威 望:27
帖 子:1253
专家分:5982
附件: 您没有浏览附件的权限,请
报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
来 自:神界
等 级:版主
威 望:363
帖 子:12333
专家分:48692
&&得分:10&
在弹出的日期和时间对话框中可以看出系统时间被重新设置。。。。。这句话的意思是你自己双击屏幕右下角,自己去看
DO IT YOURSELF !
来 自:神界
等 级:版主
威 望:363
帖 子:12333
专家分:48692
这个代码是可以更改时间和日期的
procedure TForm1.Button1Click(Sender: TObject);
yourtime:T
&&with yourtime do
&&& wyear:=1999;
&&& wmonth:=12;
&&& wday:=1;
&&& whour:=0;
&&& wminute:=0;
&&& wsecond:=0;
setsystemtime(yourtime);
DO IT YOURSELF !
来 自:神界
等 级:版主
威 望:363
帖 子:12333
专家分:48692
如果你真的想在程序中调用系统自带的那个时钟模块&&&试试以下代码:
procedure TForm1.Button1Click(Sender: TObject);
yourtime:T
&&with yourtime do
&&& wyear:=1999;
&&& wmonth:=12;
&&& wday:=1;
&&& whour:=0;
&&& wminute:=0;
&&& wsecond:=0;
setsystemtime(yourtime);
winexec('rundll32.exe /d shell32.dll,Control_RunDLL timedate.cpl',SW_SHOWDEFAULT);
[ 本帖最后由 wp231957 于
09:28 编辑 ]
DO IT YOURSELF !
来 自:神界
等 级:版主
威 望:363
帖 子:12333
专家分:48692
以下是引用不懂才问在 06:07:42的发言:
procedure TForm1.Button1Click(Sender: TObject);
yourtime:T
&&with yourtime do
&&& wyear:=1999;
&&& wmonth:=12;
&&& wday:=1;
&&& whour:=0;
&&& wminute:=0;
&&& wsecond:=0;
getsystemtime(yourtime);
我反复对照了几遍,代码应该没错,但运行程序点按钮就是没反应
你的失败代码 乃是马大哈所导致
就算你不懂英文,那最简单的setXXXX 是设置XXXX 是更改的操作&&而getXXXX 是获取XXXX 它是阅读操作不是更改操作
DO IT YOURSELF !
版权所有,并保留所有权利。
Powered by , Processed in 0.061650 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights Reserved}

我要回帖

更多关于 strcmp函数的实现 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信