操作系统学习笔记2 | 操作系统接口

本文探讨了操作系统接口的作用和类型,包括命令行和图形按钮,详细解析了系统调用的实现过程,从为什么不能直接访问内核到如何通过中断和系统调用进入内核态。通过实例分析了write系统调用的完整流程,揭示了操作系统接口的工作原理。
摘要由CSDN通过智能技术生成

这部分将讲解上层应用软件如何与操作系统交互,理解操作系统到底发生了什么事情,理解操作系统工作原理,为以后扩充操作系统、设计操作系统铺垫。


参考资料:

  • 课程:哈工大操作系统(本部分对应 L4 && L5)
  • 实验:操作系统原理与实践_Linux - 蓝桥云课 (lanqiao.cn)
  • 笔记:操作系统学习导引 · 语雀 (yuque.com)

0815这部分听的比较折磨,反复听了几次,终于基本理解了整个过程。


1. 接口

  • 生活中的接口有:电源插座、油门阀......
  • 总结一下,连接两个东西;进行信号转换、屏蔽细节;特点:上层使用接口非常方便,不必在意接口背后做了什么;而接口内部需要进行转化。

学习操作系统接口,不仅要关注如何调用接口,还要理解接口内部的工作原理。

2. 操作系统接口

正如生活中的接口,对于上层来讲,接口的存在是十分自然的,当我们有某项需求,才会使用响应接口

如使用电的需求,才会用到插座

我们如何使用操作系统呢?

-- 比如

  1. 我们终端键入一个命令
  2. 操作系统内部进行处理
  3. 屏幕上就显示出来相应内容
  4. 也不一定都是命令
  • 操作系统接口大致有3种
    • 命令行、图形按钮、应用程序

2.1 命令行

命令行是什么?即输入命令后发生了什么?

  • 命令就是一段程序
  • 举个例子,程序编译后变成可执行程序,就可以在命令行以命令的方式执行(如下图),这些程序中包含一些语句,就是对操作系统接口的调用
  • 操作系统启动到最后,打开一个桌面 / shell,打开桌面和shell是一回事
  • 现在我们常见的是打开桌面。而一些服务器启动后就是shell,没有桌面。
  • shell也是一段程序,在main.c中一系列的初始化之后,会执行/bin/sh,这个文件可以自己写。
  • shell 程序的主体:
  • hide codeint main(int argc,char *argv[]){ char cmd[20]; while(1){ scanf("%s",cmd); if(!fork()){exec(cmd);} else{wait();} }//while(1) }
  • 可见shell 是一段死循环,会用if(!fork()){exec(cmd);} 来执行用户输入的命令。
  • 其中fork和exec是真正的操作系统接口,这涉及进程管理(CPU管理)。
  • 现在回头看一下上图的过程:
  • 系统启动到最后执行shell,如上面程序
  • shell 调用scanf 打出cst:/home/lizhijun#
  • 正好20个字符
  • 通过 fork()以及 wait() 申请CPU,让其执行左上角的代码
  • 通过printf() 打出 ECHO:hello
  • 除了 fork() 和 wait() 调用CPU 以外:
    • scanf也是真正的操作系统接口,可以实现从键盘读入信息,调用了键盘输入
    • 另外printf也是,可以调用显示器
  • 可见命令行就是一些程序,通过一些函数实现对计算机硬件的使用。

2.2 图形按钮

图形按钮基于一套消息机制。

说明:

linux0.11只有命令行,而没有图形界面linux 有图形界面是比较新的版本如ubuntuWindows也有可以尝试在linux0.11上实现图形界面

如何实现?

  • 当鼠标点击、键盘按下后,通过中断,这一事件被放到消息队列中
  • 而应用程序需要写一个系统调用getmessage(),从操作系统内核中把消息队列中的消息取出
  • 而应用程序是一个不断从消息队列中取消息的循环,这就是消息机制
  • 根据拿出的消息执行对应的函数
  • 以上图程序为例,做了一件什么事情:
  • 硬件输入
  • 放入消息队列
  • 应用程序的消息循环取出消息
  • 这里是应用程序调用了操作系统的接口
  • 判断消息类型(右侧函数)
  • 下方函数中,打开一个文件,写入字符串
  • 这里使用了调用磁盘的函数

应用程序接口先不讲。

2.3 总结

从上面可以知道,命令行和图形按钮都是一些程序,就是普通的C程序,只是在C的基础上使用了一些重要的函数,这些函数可以进入操作系统、使用硬件

可见,这些函数就是电源插座,就是操作系统的接口

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值