操作系统系列(5):操作系统接口

1.什么是接口

首先,我们从日常生活中的一个小例子来了解接口的概念.....

操作系统系列(5):操作系统接口_第1张图片

 

图中的插座就是一个接口插座的里面连接着线路插座的外面连接着我们所使用的电器的插头

有了插座以后,我们只需要把电器的插头插进插座,而不需要关注插座后面的复杂连接,便可以使用我们的电器了。

因此,我们很直观地认识到接口的含义连接两个东西(插座建立了里面的线路和外面的插头的连接),屏蔽细节(插座里面连接的复杂线路用户不需要知道),方便用户使用(插上插座就能用)。

2.操作系统接口与系统调用

参考上述例子....

操作系统系列(5):操作系统接口_第2张图片

 

同理,操作系统接口也具有连接两个东西、屏蔽细节、方便用户使用的特点它连接上层应用软件和底层硬件,屏蔽细节,用户直接通过程序(应用软件)使用计算机,方便用户使用。

如,我们只需要通过在键盘上敲一个hello的命令(程序代码),该命令通过操作系统的内部处理,处理后在显示屏上显示hello字样。操作系统就相当于一个黑盒子,我们无需关注内部实现,对外面的用户屏蔽其内部细节。

操作系统系列(5):操作系统接口_第3张图片

 

因此,我们普通用户是通过程序(应用软件)去使用计算机的,操作系统接口连接了硬件和应用软件。其实操作系统提供的接口也就是一行行的C语言程序,我们使用的软件去调用这些操作系统函数,完成对底层硬件的控制。

操作系统系列(5):操作系统接口_第4张图片

 

上端黑色表示是用户程序区,下端红色表示操作系统内核,操作系统内核有一个打印操作系统当前用户名的函数 print_user() ,用户程序通过调用该print_user() 函数,实现该用户程序在屏幕上打印出操作系统当前使用者名字的功能。其中,print_user()就是操作系统的接口,上层的用户程序通过调用该接口,该接口完成内部完成打印功能。

因此,这就是操作系统的接口了,它表现为函数调用,又由于它由操作系统提供,所以称为系统调用。

  • 那我们为什么要通过系统调用而不能直接去访问操作系统内核内存地址为100的数据?

----因为操作系统内核存放着有关于操作系统、计算机软硬件等各种重要的数据,比如操作系统root用户的密码,如果我们直接访问系统内核,就可以随便看到root用户的密码,还可以去修改它,又比如通过内核里面的显存信息能看到别人word里内容,这样就不安全了,所以操作系统封装一些功能接口,然后让用户去调用这些接口而禁止用户直接访问内核中的数据。如果能直接访问就能去修改一些数据,就能随便查看一些敏感的数据,这样对用户不安全。

所以我们把内存分为了操作系统内核段用户程序用户段,把在内核段执行的代码和数据称为处于内核态,把在用户段执行的代码和数据称为处于用户态,将内核程序和用户程序隔离!!!使得内核态可以访问任何数据,用户态不能访问内核段数据而只能访问用户段数据。

3.内核态、用户态;内核段、用户段

还是以上面那幅图来讲

操作系统系列(5):操作系统接口_第5张图片

 

上图为内存模型。

上端黑色区域为用户段,执行普通用户程序;下端红色区域为内核段,执行操作系统内核代码。

如果此时CPU在处理上端黑色区域的 main() 函数,那此时处于用户态,如果此时CPU在执行下端红色区域的 print_user() 函数,那此时处于内核态

1)处于内核态可以访问用户段和内核段的数据。

2)处于用户态只能访问用户段的数据而不能访问内核段的数据。

那么如何区分内核态用户态呢?

计算机采取了一种处理器的"硬件设计"去区分。完成这功能的要用到两个寄存器,分别是CPL寄存器和DPL寄存器。

CPL寄存器表示当前程序执行在什么态,0表示内核态,3表示用户态;

DPL寄存器表示即将访问的数据在什么段,同样0表示内核段,3表示用户段。

每次访问数据的时候检查两个寄存器的大小关系,若DPL≥CPL,则可以访问,反之,则不能访问。

一、例如当前程序运行在用户态,那么此时的CPL为3,若即将访问的数据在用户段(DPL为3),此时满足DPL≥CPL,可以访问(即用户态访问用户段数据),若即将访问的数据在内核段(DPL为0),则此时DPL

二、同理,假如当前程序运行在内核态,那么此时的CPL为0,因此无论即将访问的数据是处于内核段(DPL为0)还是用户段(DPL为3),都满足DPL≥CPL,因此处于内核态的程序可以访问任何数据。

好了,有关操作系统接口的内容到此为止讲述完毕,如果您觉得有什么问题的话欢迎在留言区留言,我们一起探讨交流吧!

原创不易,多多支持,欢迎交流!

IT界的泥石流与你一同成长

欢迎关注我们微信公众号:IT界的泥石流

你可能感兴趣的:(操作系统原理)