【操作系统】基础与IO(同步/异步, 阻塞/非阻塞)

1. 硬件和软件

计算机资源分为硬件资源和软件资源。

  • 硬件资源: 包括cpu,内存,显卡,网卡,声卡,硬盘等,每个硬件完成特定的功能,比如显卡完成在显示设备上显示图形,声卡实现声音的处理
  • 软件资源: 各种程序, 如web浏览器, 文本编辑工具等。

2. 操作系统与应用程序

软件中,专门负责和硬件资源交互的软件成位硬件驱动程序。比如网卡发送数据,声卡播放声音等。驱动程序提供给应用程序接口,供应用程序调用接口来使用硬件。

2.1 没有操作系统的问题

计算机上面会同时有多个应用程序运行,应用都会使用显示屏来显示,都要使用内存来运行程序,但是硬件资源总是有限的。所以需要使用一种机制来使用和分配资源。

应用程序应该只关心程序自己的功能,而不应花费时间在资源管理和分配上。

驱动程序应该只关心如何去驱动硬件,而不是资源管理和分配。那么这部分工作需要操作系统来完成。

2.2 操作系统的作用

操作系统的作用是管理各类资源(软件和硬件),并将硬件驱动程序的接口抽象,形成一套简单一直的接口给上层的应用程序应用。

🎈🎈🎈 把计算机系统想象成一个家庭的房子,操作系统就是父母,一个应用程序就是家里的一个孩子。

孩子们想要吃饭(系统资源)不会直接去操作硬件,而是父母去冰箱和烤箱中拿出食物, 分配给每个孩子一定的量, 孩子不能直接和电器进行交互。

3. 用户空间和内核空间

早期操作系统是不区分内核空间和用户空间的,但是应用程序能访问任意内存空间,

  • 如何确保一个应用程序不会霸占资源不放呢(CPU/RAM等)
  • 如何确保一个应用程序不会恶意更改系统内部资料
  • 多个程序并行时, 如何确保A应用程序不会干扰B程序

应用程序随便访问内存太危险了,所以按照CPU 指令的重要程度对指令进行了分级,指令分为四个级别:Ring0 > Ring1 > Ring2 > Ring3 

内核空间(Kernel mode)

是系统内核的运行空间, 一般是使用segment层次中的Ring0, 因为Ring0的权力是最大的, 可以执行任意命令,调用系统的一切资源;

用户空间(User mode)

是用户程序的运行空间, 通常是使用Ring3 (因为权力最小),  只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(又称 system call),才能向内核发出指令。

当进程运行在内核空间时,它就处于内核态;当进程运行在用户空间时,它就处于用户态。

 4. IO 同步/异步,阻塞/非阻塞

当我们需要进行IO操作时,如读写硬盘文件、读写网卡数据等,进程需要切换到内核态,否则无法进行这样的操作,无论是从内核态切换到用户态,还是从用户态切换到内核态,都需要进行一次上下文的切换。一般情况下,应用不能直接操作内核空间的数据,需要把内核态的数据拷贝到用户空间才能操作。

4.1 阻塞/非阻塞

阻塞/非阻塞是描述一个模块的情况。关注的是程序在等待调用结果(消息,返回值)时的状态. 

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

4.2 同步/异步

同步/异步是描述两个模块之间的关系。

所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。 换句话说,就是由调用者主动等待这个调用的结果。

而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。

 🎈🎈🎈一个例子

模块A = 我,  模块B = 麻辣香锅店

场景: 点了一份麻辣香锅

  1. 阻塞:在饭做好之前,我一直在前台那里等待。现在我(A模块)正在阻塞。

  2. 非阻塞:在饭做好之前,我离开前台去做其他事情。我可能每两分钟回来检查饭是否完成,或者在老板叫号之前不会回来。

  3. 同步:在饭做好之前,我一直在前台那里等待。模块A一直等待,直到模块B完成它的工作。现在A 和 B两个模块是同步的。

  4. 异步:在饭做好之前,我离开前台去做其他事情。在老板叫号之前,都不会回来查看。现在 A和 B两个模块是异步的。。

 更多IO模型对比,查看 https://blog.csdn.net/historyasamirror/article/details/5778378

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值