转----操作系统与应用程序的关系

Ella-Wu Ella-Wu     2022-09-10     559

关键词:

操作系统与应用程序的关系

                         ——原博地址:http://blog.csdn.net/maochengtao/article/details/8943284

操作系统与应用程序的关系:   

  操作系统主要可以分为两大部分:内核和内核之外的一些程序。

  内核就是直接控制最底层的硬件,而我们日常所用到的软件,大都是通过内核之外一些程序与内核之间的接口完成的,例如WINDOWS API就是为我们提供了应用程序与内核的接口,以实现硬件上的一些操作。操作系统(Operating System,简称OS)是一管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石。

  操作系统是一个庞大的管理控制程序,大致包括5个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理。目前微机上常见的操作系统有DOS、OS/2、UNIX、XENIX、Linux、Windows、Netware等。

  应用软件是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的应用程序的集合,分为应用软件包和用户程序.应用软件包是利用计算机解决某类问题而设计的程序的集合,供多用户使用。

内核系统与应用程序的关系:   

  在linux系统中,内核为用户程序提供了两方面的支持。

  其一是系统调用接口,即中断调用int 0x80;另一方面是通过开发环境库函数或内核库函数与内核进行信息交流

  不过内核库函数仅供内核创建的任务0和任务1使用,它们最终还是去调用系统调用。因此内核对所有用户程序或进程实际上只提供系统调用这一种统一的接口。lib/目录下内核库函数代码的实现方法与基本C函数库libc中类似函数的实现方法基本相同,为了使用内核资源,最终都是通过内嵌汇编代码调用了内核系统调用功能。

  系统调用主要提供给系统软件编程或者用于库函数的实现。而一般用户开发的程序则是通过调用像libc等库函数来访问内核资源。这些库中的函数或资源通常被称为应用程序编程接口(API),其中定义了应用程序使用的一组标准编程接口。通过调用这些库中的程序,应用程序代码能够完成各种常用工作,例如,打开和关闭、对文件或设备的访问、进行科学计算、出错处理以及访问组和用户标识号ID等系统信息。

  在UNIX类操作系统中,最为普遍使用的是基于POSIX标准的API接口。Linux当然也不例外。

  API与系统调用的区别在于:为了实现某一应用程序接口标准,例如POSIX,其中的API可以与一个系统调用对应,也可能由几个系统调用的功能共同实现。当然某些API函数可能根本就不需要使用系统调用,即不使用内核功能。因此函数库可以看做实现像POSIX标准的主体界面,应用程序不用管它与系统调用之间到底存在什么关系。无论一个操作系统提供的系统调用有多么大的区别,但只要它遵循同一个API标准,那么应用程序就可以在这些操作系统之间具有可移植性。

  系统调用是内核与外界接口的最高层。在内核中,每个系统调用都有一个序列号(在include/unistd.h头文件中定义),并且常以宏的形式实现。应用程序不应该直接使用系统调用,因为这样的话,程序的移植性就不好了。因此目前Linux标准库(Linux Standard Base,LSB)和许多其他标准都不允许应用程序直接访问系统调用宏。

  库函数一般包括C语言没有提供的执行高级功能的用户级函数,如输入/输出和字符串处理函数。某些库函数只是系统调用的增强功能版。例如,标准I/O库函数fopen和fclose提供了与系统调用open和close类似的功能,不过是在更高的层次上。在这种情况下,系统调用通常能提供比库函数略微好一些的性能,但是库函数却能提供更多的功能,而且更具检错能力。

  实际上软件程序还可以细分成两种:系统程序软件和应用程序软件。系统程序软件实际上就是我们所说的驱动程序,它们的目的只有一个,就是为了驱动硬件,使之能正常地完成某种硬件功能,比如网卡的发送数据功能,声卡的播放声音功能。应用程序软件则用来接收用户的输入请求,进行很多业务运算后,再通过驱动程序驱动硬件去完成用户所要求的任务,有时候应用程序软件也负责把运算的最终结果反馈给用户。画成图就是图一那样,注意,在整个软件系统中,也只有驱动程序最清楚硬件的功能及工作方式,如果上面应用程序想要硬件完成什么样的任务,必须使用相应的驱动程序所提供的那些接口才行。驱动程序直接驱动硬件进行工作,而应用程序则只需要知道这些接口,通过它们间接去驱动硬件来完成任务。这种策略看似简单好用,但也会受到两方面因素的制约。

                                                             技术分享

                                                                             图一 

  首先,一个计算机系统里面的硬件设备通常不会只有一个。比方我的魅族MP3里除了音频解码器外,自然也有用来存储歌曲的设备。这些设备各具不同的功能,完成这些功能的操作也就各不相同,就决定了写出来的驱动程序也是各式各样的,最后导致他们提供给应用程序使用的接口也是千变万化的,如图二那样,用不同颜色的箭头表示不同的接口使用。这大大增加了应用程序开发的难度,因为应用程序开发者不仅要考虑上层业务逻辑的处理,还要非常熟悉各种驱动所提供出来的不同接口。

  图二: 一个应用使用多个硬件设备

  其次,一个计算机系统里面同时运行着的应用程序通常也不会只有一个,这些应用程序会竞争使用总量特定的硬件设备资源。比方你和朋友在用qq聊天的同时,也听着千千静听放出来的音乐,他们都要使用屏幕设备show出界面,也都要使用物理内存(2)来运行程序代码。但是屏幕只有一个,内存也只有那么多,所以在整个计算机系统范围内,必须有某种机制来管理分配这些特定硬件资源的使用。如图三,设计的时候,这种机制要么放在应用程序中实现,要么放在驱动程序中实现,但无论放在哪一方,都是会给这一方的程序开发者带来额外的负担。

                                        技术分享

                                                        图二 一个应用使用多个硬件设备

                                         技术分享

                                                     图三: 多个应用使用多个硬件设备

  引入操作系统之后:上面之所以说额外,那是因为对于应用程序开发者来讲,其重点要考虑的是业务逻辑如何实现,而不是去考虑硬件资源的管理分配,也最好用不着去区分那么多驱动程序的不同接口。类似的,对于驱动程序开发者来说,其要考虑的重点是如何正确的驱动特定的硬件,而不是去考虑硬件资源的管理分配上。那这部分“额外”的工作由谁去做呢,这正是后来出现的操作系统(3)的职责所在。

                                          技术分享

                                                           图五: 引入操作系统后的情况

   如图五,操作系统帮我们考虑对各种硬件资源的分配管理,并完成对各种驱动程序所提供接口的抽象,形成一套简单一致的接口给上层的应用程序去使用。如此,应用程序开发人员只需要知道操作系统所提供的这套编程接口(API),就可以实现不同的业务应用。前面我们讲系统程序软件实际上就是驱动程序,但这里我们讲系统程序软件是操作系统。概念上,我们认为操作系统依赖于驱动程序这一层,但实际上,驱动程序是嵌入到操作系统中去的,所以我们认为驱动程序是操作系统的一部分。这种镶嵌大大增加了以往驱动程序开发者的工作难度,因为他们不仅要熟悉手头的硬件工作原理,更重要的是要确保他们写的驱动能正确的镶嵌到操作系统里面去,这就要求他们同时也必须熟练掌握操作系统提供出来的,用来完成镶嵌工作的各种接口。

 

转:llvm与clang的概述及关系

转:http://www.cnblogs.com/saintlas/p/5738739.html   LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time)... 查看详情

java线程与linux内核线程的映射关系(转)(代码片段)

...进程。 Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的。Linux2.6上的HotSpot使用了NPTL机制,JVM线程跟内核轻量级进程有一一对应 查看详情

进程和线程关系及区别_转

...一个进程的其他的线程共享进程所拥有的全部资源. 2.关系一个线程可以创建和撤 查看详情

cmd是啥?与dos有何关系?怎么用(操作)?

cmd或者command是windows操作系统的命令控制台,平时叫它控制台,它是DOS的仿制器,大部分DOS下的命令都可以在控制台下完成以下转贴不直接触及到硬件操作的dos程序都是可以在控制台里面运行的.控制台程序也是一种Win32程序,一般都会... 查看详情

(转)aix下的mpiordacsddpcm多路径软件操作(aix下的mpio,查看aix下hdisk与盘柜卷lun的对应关系)

AIX下的MPIO、RDAC、SDDPCM多路径软件操作(AIX下的MPIO,查看AIX下hdisk与盘柜卷lun的对应关系)原文:http://blog.163.com/huangbao_007/blog/static/35636535201632811465562/一:查看存储盘的路径 1、查看MPIO的存储盘的路径 #lspath   &nb 查看详情

应用erp系统与企业的关系

  随着ERP系统的深入发展,越来越多的企业开始实施ERP,ERP实施是借用一种新的管理模式来改造原企业旧的管理模式,是先进的、行之有效的管理思想和方法。ERP软件在实际的推广应用中,其应用深度和广度都不到位,多... 查看详情

计算机-进程与线程的关系

...读者。计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。进程进程是... 查看详情

jdkjrejvm三者之间的关系与区别

...点就是可以跨平台像其它语言,比如C,我们要针对不同操作系统windos,mac……各出一套应用程序而Java则可以做到一个软件在任何的操作系统中都能执行,这就 查看详情

sprngdatajpa与hibernate的关系

1.ORM概述 ORM(Object-RelationalMapping)表示对象关系映射。在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中。只要有一套程序能够做到建立对象与数据库的关联,操作对象就可以直接操作数据库数据,就... 查看详情

ros系统moveit玩转双臂机器人系列--浅议机器人运动学与d-h建模

...sp;  机器人运动学研究的是机械臂各个连杆之间的位移关系、速度关系和加速度关系。比较经典的一本书推荐大家读读熊有伦的《机器人技术基础》下载网址在这。本篇博文将从刚体的位姿描述讲起,逐步过渡到D-H法运动学建... 查看详情

[转]计算机视觉与图像处理模式识别机器学习学科之间的关系

...一个重要分支,人工智能与机器学习密不可分。纵观一切关系,发现计算机视觉的应用服务于机器学习。各个环节缺一不可,相辅相成。计算机视觉(computervision),用计算机来模拟人的视觉机理获取和处理信息的能力。就是是... 查看详情

java与ntdll.dll的关系

...发布时间】:2018-11-2309:29:05【问题描述】:我有一个java应用程序(tomcat-app)在后台使用JNI连接到C库。这个java应用程序以一种非常随机的方式崩溃。我在系统事件中看到,是基于ntdll.dll崩溃的,它是Windows/System32中的系统库。谁能... 查看详情

(转)虚拟内存与内存映射文件区别与联系

  虚拟内存与内存映射文件是操作系统内存管理的重要部分,二者有相似也有不同的地方,本文是作者学习与应用中得到的一些体会,有错误的地方,请提点。二者的联系:虚拟内存与内存映射文件都是将一部分内容加载的内... 查看详情

进程线程《转》

...同属一个进程的其他的线程共享进程所拥有的全部资源.2.关系一个线程可以创建和撤销另一个线程 查看详情

微信小程序中tabbar与导航api的页面跳转处理关系

参考技术A首先,必须检讨自己,出现这种问题的确是自己阅读文档不仔细。在学习页面之间传递参数时,同时设置了tabBar和点击跳转导航wx.navigateTo,并且两个设置跳转的页面路径一致,发现wx.navigateTo跳转是不生效的,至于想要... 查看详情

程序与代码有啥关系

...所理解,进行加载。如果在一个符合大多数的计算机上,操作系统例如Windows、Linux等,加载并执行很多的程序,在这种情况下,每一个程序是一个单独的映射,并不是计算机上的所有可执行程序。源代码作为软件的特殊部分,可... 查看详情

大数据技术原理与应用实验3——nosql和关系数据库的操作比较(代码片段)

NoSQL和关系数据库的操作比较一、实验目的二、实验环境三、实验内容(一)MySQL数据库操作1.根据上面给出的Student表,在MySQL数据库中完成如下操作:2.使用MySQL的JAVA客户端编程实现以下操作:(二)HBase数... 查看详情

数据库系统

模型与语言关系 关系元祖属性------通过对生活中例子,理解对应的抽象概念,元组对用每一行,属性对应一列。谓词演算 关系代数-----交差并补笛卡尔积投影选择连接广义积  数据库系统的结构抽象与演变 数... 查看详情