(二)计算机体系结构


第一部分  IO基础知识

计算机系统软件体系结构采用一种层的结构,有人说过一句名言:

“Any problem  in computer science can be solved by anther layer of indirection.”
“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”

0.计算机的体系结构图

1.操作系统概念

       操作系统(opearting OS)是管理和控制硬件与软件的计算机程序,它是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源、控制程序运行,改善人机界面等,以使计算机系统所有资源最大限度地发挥作用。

2.App-POSIX C API-GNU C库-系统调用-内核 三者之间的层次关系

(1)内核级别的sysCall

       为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。通过这组接口用户程序,可以使用操作系统内核提供的各种功能,实现分配内存,创建线程,进程通信。内核级别的系统调用定义在内核的头文件中。Linux的操作系统级别的系统调用函数定义要参考内核代码树的/include/linux/syscalls.h。所有的操作系统都具有系统调用接口,不同操作系统的系统调用接口也是不同的。linux操作系统调用接口非常精简,它继承了Unix操作系统的系统调用中最基本和最有用的部分。

(2)系统调用的好处

  • 用户空间进程访问内核的接口。所有的操作系统都提供多种服务的入口点,通过这些入口点,用户态程序而是要通过设置软中断的方式陷入内核才能执行内核的函数,向内核请求服务
  • 把用户从底层的硬件编程中解放出来。例如单片机编程,驱动硬件需要查看芯片手册,查阅引脚定义。而有了操作系统以后,用户就不需要进行硬件编程了。操作系统完成了这样的工作,我们直接使用操作系统提供的接口即可。
  • 极大的提高了系统的安全性。受限地访问硬件设备资源。实际上这些接口主要是为了保护系统稳定可靠,防止应用程序恣意妄为(例如:攻击磁盘的黑客。一直使用某个磁道,直到把他用坏。)

(3)POSIX定义的--C语言形式的--用户编程接口API(Application Program Interface )

为什么不直接使用系统调用接口而使用用户编程接口(API)?

  • 不同操作系统系统调用不兼容,程序移植工作量大,使用API,减少代码移植的工作。
  • 系统调用接口功能简单单一(每个系统调用都应该有一个明确的用途。Linux中不提倡采用多用途的系统调用),无法满足程序要求,使用API,可以提供大量的库函数。
  • 用户编程接口通俗称各种库(最重要的就是C库)中的函数。为了提高开发效率,C库实现很多函数。这些函数实现了常用的功能,供程序猿调用。这样程序猿不需要自己编写这些代码,直接调用库函数就可以实现基本功能,提高代码的复用率。
  • 使用用户编程接口:具有良好的可移植性,几乎所有的操作系统上都实现了C库,所以程序只需要重新编译一下就可以在其他系统下运行。

3.API的三种形式:

  • (1)这些POSIX C API中,有的一个API可以直接对应一个sysCall,系统调用.
  • (2)有些API内部实封装了更复杂的功能,可能会间接调用多个sysCall;
  • ()或者有些API完全不使用任何syscall。对这些对应多个内核系统调用或者不使用系统调用的库函数,我们就还是叫它库函数。open函数就是直接对应调用内核级的syscall,但比如一些数学运算的库函数就根本不会调用内核系统调用。后面讲的标准IO里的一些函数就会封装多个内核系统调用。

注意:这套API在Linux上由GNU C库提供,或者叫gLibc.。

4.POSIX简介

       POSIX是一个由I E E E (电气和电子工程师学会 )制订的标准族。 POSIX的意思是计算机环境的可移植操作系统界面(Portable Operating System Interface for Computer Environment)。该标准目的是为了提高UNIX环境下应用程序的可移植性。通俗的理解,为一个POSIX兼容的操作系统编写程序,可以在任何其他POSIX操作系统上编译执行。

GNU C库:就是POSIX标准的实现者之一,提供基本的POSIX功能。其他POSIX功能可以由第三方的库再提供,比如pthread。

总结:系统调用是对应操作系统级别的原子操作,提供一个访问内核的最小界面。而库函数是面向应用为了方便应用某些功能实现进行了封装,内部可能调用系统调用,也可能没有。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值