【操作系统】操作系统接口初探

目录

用户对操作系统接口(以下称作接口)的感知

用户在使用操作系统时都通过什么方式访问了操作系统接口?

由用户对接口感知方式的思考

用户通过不同的方式实现对接口的访问,进而实现与操作系统的交互,为什么一定要有接口这样的概念,为什么不可以直接与操作系统进行交互?

当用户在命令行敲入一行命令,它的背后究竟发生了什么?

多米诺骨牌的样貌

系统调用对操作系统的访问

为什么要限制jmp 

如何限制

限制后又怎样访问内核态

总结


用户对操作系统接口(以下称作接口)的感知

用户在使用操作系统时都通过什么方式访问了操作系统接口?

当用户使用Dos、shell等程序的过程,就是用户在调用接口,使用接口的过程,用户通过键入不同的指令,触发接口并通过接口实现对操作系统信息的访问。

当用户使用图形界面时,对各种文件和功能按钮的点击,便是用户对操作系统接口的调用,操作系统随即对用户进行反馈。

当用户使用安装在系统上的应用程序时,应用程序会在内部访问以及调用接口,以此实现用户程序与操作系统的交互。

 

由用户对接口感知方式的思考

用户通过不同的方式实现对接口的访问,进而实现与操作系统的交互,为什么一定要有接口这样的概念,为什么不可以直接与操作系统进行交互?

        操作系统的接口就好像生活中的插座,各种电器工具的开关,人们创造出接口,得以将内部复杂的线路实现透明化,使人们可以不用考虑内部的设计如何,而是通过外部的接口一键式的实现自己所需要的功能。而直接与操作系统进行交互就好像修理电器的工程师,需要对内部构造十分熟悉才能对其进行修复工作,这无疑加大了人们对工具的使用成本,且极容易出现问题,并且直接与操作系统的交互不能确保操作系统中信息数据的安全,任何数据都可以被任何人在任一时刻读取,用户信息将一览无遗

当用户在命令行敲入一行命令,它的背后究竟发生了什么?

        当用户通过命令行程序键入一条指令,这条指令就像被推倒的第一块多米诺骨牌,一环一环直至多米诺骨牌全部倒下,从而我们得到指令的反馈。

多米诺骨牌的样貌

        在操作系统的System模块被执行后,操作系统对计算机的各个部件进行初始化,并在最后打开被我们熟知的shell,shell即为一个程序,我们在shell上键入指令,指令即是一些定义好的函数,我们执行这些函数,这些函数通过层层的宏定义,被编译器解释成为包含调用接口的关键语句和一些普通语句的样子,通过关键语句与操作系统进行交互,这些关键语句即为系统调用。

        操作系统提供的能访问操作系统信息的系统调用有很多,如果每台机器的操作系统对这些系统调用采用不同的设置,就好像两个不同的插座规格截然不同一样,必然引起一系列的问题,所以早些年IEEE对接口定制了标准,即POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX )。在使用了POSIX标准后,同一程序在不同平台都可以通过统一的规格发起对操作系统的访问,这极大的提高了程序的可移植性。

系统调用对操作系统的访问

为什么要限制jmp 

        系统调用(System_call) 是操作系统接口,任何调用本质上都是内存地址的跳转,但用户像操作系统的直接跳转,即jmp是万万不可的,为了保证操作系统的安全,一定要对jmp等可以直接跳转到操作系统内存空间或是直接修改操作系统内存空间的指令进行限制。

如何限制

        计算机将用户和操作系统内核抽象成用户段和内核段,将它们的状态抽象成用户态以及内核态,直观上,我们一定要限制用户态对内核态的访问,允许用户态自己内部,内核态自身内部的跳转访问等操作,允许内核态对用户态的访问,为了实现这一限制,计算机硬件设计并存储CPL(current privilege level),当前权限等级;DPL(destination privilege level),目标权限等级,并通过硬件设计控制仅当DPL>= CPL时,才允许进行访问操作,并在head.s初始化时,在GDT表中初始化并存储DPL的信息,将用户态置为3,内核态置为0;CPL则为cs段寄存器的最后两位,同样将用户态置为3,内核态置为0。在将操作系统搬至0x0000处后,任何对操作系统的访问的DPL都将是0,这也就限制了用户态向内核态的访问。

限制后又怎样访问内核态

        很明显,任何对操作系统内核的直接访问都将被限制,想要访问操作系统内核的唯一办法便只能是中断,这便是操作系统留给用户访问内核的唯一一条路。但并不是所有的中断都能访问操作系统内核,操作系统提供的进入内核的大门只有int0x80H,即80中断,所以所有系统调用最后都应被解释成80中断和一些普通语句。80中断又是如何有如此大的神力,能够作出其他人所不能的呢?

        执行80中断,一定会访问的便是IDT表,系统查阅IDT表,给80中断的地址的DPL特别设置为3,这样用户态便能进入内核态,一旦进入内核态,CPL的值就会变为0,这时候就可以在内核里进行操作,也可以在最终能够有权限返回用户态,返回用户态,CPL的值便又变回3,这样就恢复成原来的样子,一切便又可以重新开始。

总结

        int0x80H是操作系统提供给用户的一条且唯一一条能够访问内核的大门,所有的系统调用最后都应该被解释成为int0x80H中断和一些普通语句,这就是操作系统接口的大致模样。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值