撸一撸简单的操作系统知识
前言
打开浏览器,做个简单计算,我们能看到控制台打印出计算结果,这个过程究竟发生了什么?
一个简单计算
首先,我们使用键盘输入计算式子,指令会被放入内存中,相应的控制器会取出内存中的指令,运算器拿到结果之后仍然会返回给内存,输出设备继续读取内存讲结果展示出来。
那么操作系统是干什么的呢?如果没有操作系统,JS要处理硬件的协调工作,进程之间的切换等等,说到了进程,Node.js问这个的可能性可是很大的。
操作系统
操作系统有四个特征,并发,共享,异步,虚拟。
首先并发,并发并不是指多个任务同时执行,只是通过任务调度使得看起来是可以同时执行。操作系统的并发性指的是操作系统中可以同时存在多个运行的程序,举例来说就是单核CPU运行着多个应用程序。
共享,当你用quicklook和vscode同时访问一个文件时,你会发现并没有想象中的报错,这就是一种共享的方式;同时当你访问某个文件,却又删除这个文件时,你会发现他会有报错,这也是一种共享的体现,只不过叫做互斥共享。
虚拟我们经常接触,从xp开始就知道配置虚拟内存了,包括虚拟存储和虚拟处理器,虚拟的特性是以并发作为基础的。
异步就不用解释了。
刚刚提到了指令,一般来说,指令是CPU能识别和执行的最基本命令,依据权限大小可以分为特权指令和非特权指令,同时CPU也有两种状态,用户态和内核态,前者只能执行非特权指令。
看一张图:
时钟管理,如进程切换,获取时间信息,都依赖时钟管理,如一个程序的时间分片结束之后,要切换下一个程序,而如果某个程序要进行系统资源调用,运行在用户态的程序已经无法满足需求,我们需要切换到内核态,经过一定的调度后,该系统资源准备就绪,通过I/O控制器会给操作系统发出一个中断信号,从用户态切换到内核态,这个过程就是中断处理的过程,也是唯一实现的方法。除此之外,中断还有很多其他的分类。
进程
现代操作系统的特性决定了每个应用程序都需要分配一定的资源,如CPU,内存等,系统自然要生成一种数据结构称为PCB(进程控制块),来描述进程信息。
进程有三种基本状态,运行态,就绪态和阻塞态,还有两种额外状态,创建和终止。
需要注意的是,因为进程资源都是独立分配的,所以他们所拥有的内存地址空间都是互相独立的,因此进程通信就是很必要的。
一般来说,通信方式有共享内存,这个很好理解。
有管道,即一个用与链接独写进程的一个共享文件,在内存中开辟一块缓存区,需要注意的是pipe是半双工通信,即只能单向,实现全双工需要两个 pipe。
还有消息传递等,如通过中间件实现发布订阅模式等。
其他
内存是硬件设备与CPU沟通的中转站,程序执行前需要先放到内存中才能被CPU处理。
内存分配分为连续分配和非连续分配,连续分配是指用户进程分配的必须是一个连续的内存空间。
文件其实是一组数据的集合,整个文件系统可以看作一个树结构。
其他还有IO控制设备等。
参考文章
看这里
撸一撸简单的操作系统知识相关推荐
- 手撸一款简单高效的线程池(五)
在之前的内容中,我们给大家介绍了 C++实现线程池过程中的一些常用线优化方案,并分析了不同机制使用时的利弊.这一篇,是线程池系列的最后一章.我们会介绍一下 CGraph 中的 threadpool 如 ...
- 2017菜鸡C与C++工程师总结,撸码撸码,垃圾专科生撸码人生
前言 年底了,对工作做一个总结.又要感叹那句话啊,时光流水,仿佛昨天才刚毕业,到今天不知不觉已经正式工作半年了.文章以po主自己的心理想法和所见所闻入手来写,垃圾专科生,文笔不好勿怪.开始正文吧. 关 ...
- 软件设计师-操作系统知识
1.操作系统知识: 1.1基本概述 操作系统是一个大型的软件系统,是为了提高计算机系统资源(硬件和软件资源)的利用效率并方便用户使用的一组程序,这些程序可以用软件实现,也可以用固件(微程序设计)实现. ...
- 怎样写一个简单的操作系统?(原文标题:How to write a simple operating system) 分类: 翻译 2011-01-26 01:10 3175人阅读 评论(3) 收藏
怎样写一个简单的操作系统?(原文标题:How to write a simple operating system) 分类: 翻译2011-01-26 01:10 3175人阅读 评论(3) 收藏 举 ...
- 撸一撸Spring Framework-IoC-概述
撸一撸Spring Framework-IoC系列文章目录 IoC概述 BeanFactory ApplicationContext BeanDefinition BeanWrapper 资源管理利器 ...
- 2021的最新操作系统知识梳理,建议收藏!
推荐阅读: 这套Github上40K+star学习笔记,可以帮你搞定95%以上的Java面试 毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题 给跪了!这套万人期待的 SQL ...
- 撸一撸今年阿里,华为,百度,腾讯,美团,头条,滴滴等的面试题
2019年被很多人称之为是互联网的寒冬.那我们就来撸一撸2019年截止到现在的一线大厂的面试题,看看这个2019对我们自己来说,是不是一个寒冬? 面试题整理包含阿里/华为/百度/腾讯/美团/头条/滴滴 ...
- 面试中的操作系统知识
面试中的操作系统知识 同步和互斥,锁 举一个死锁的例子 进程和线程的区别 进程是资源分配的单元,线程是系统调度的单元 转自https://www.zhihu.com/question/25532384 ...
- 写一个简单的操作系统
摘 要 如果一定要找出OS最重要的核心,那就是调度器,调度器本身即可以看作一个简单的操作系统,允许以周期性或单次方式来调用任务.从底层的角度看,调度器可以看作是一个由许多不同任务共享的定时器中断服务程 ...
最新文章
- 【Notes6】ajaxjson,校验用户名,自动提示,CORS,/swagger开发rest,Websocket,DNS
- ASP.NET Core on K8S学习初探(1)
- 如何更sql sever数据库表的所有者
- 基于B/S架构的故障模型
- 图像、帧、片、NALU(firstime)
- indy10 UDP实例
- 2019年新款iPhone高清渲染视频来了 强迫症慎点...
- C++socket编程(三):3.3 bind端口
- r语言去除字符串两端多余空格
- div中文字居中加粗
- 很不错的js幻灯片代码分享
- 关于body.clientHeight,body.clientWidht获取的不是可视高度的问题
- Unity物体跟随鼠标移动
- Navicat8.0注册码
- ffmpeg截取视频指定帧方法
- 不努力做事,隔壁老王 可想而知您将来必然是艰难的
- 删除 文件夹出现0x80070091错误提示目录不是空的.txt
- 聊聊Benchmark测试【转载】
- 漫画:程序员调bug的真实写照233
- windows10自动修复无法开机