前言

打开浏览器,做个简单计算,我们能看到控制台打印出计算结果,这个过程究竟发生了什么?

一个简单计算

首先,我们使用键盘输入计算式子,指令会被放入内存中,相应的控制器会取出内存中的指令,运算器拿到结果之后仍然会返回给内存,输出设备继续读取内存讲结果展示出来。

那么操作系统是干什么的呢?如果没有操作系统,JS要处理硬件的协调工作,进程之间的切换等等,说到了进程,Node.js问这个的可能性可是很大的。

操作系统

操作系统有四个特征,并发,共享,异步,虚拟。

首先并发,并发并不是指多个任务同时执行,只是通过任务调度使得看起来是可以同时执行。操作系统的并发性指的是操作系统中可以同时存在多个运行的程序,举例来说就是单核CPU运行着多个应用程序。

共享,当你用quicklook和vscode同时访问一个文件时,你会发现并没有想象中的报错,这就是一种共享的方式;同时当你访问某个文件,却又删除这个文件时,你会发现他会有报错,这也是一种共享的体现,只不过叫做互斥共享。

虚拟我们经常接触,从xp开始就知道配置虚拟内存了,包括虚拟存储和虚拟处理器,虚拟的特性是以并发作为基础的。

异步就不用解释了。

刚刚提到了指令,一般来说,指令是CPU能识别和执行的最基本命令,依据权限大小可以分为特权指令和非特权指令,同时CPU也有两种状态,用户态和内核态,前者只能执行非特权指令。

看一张图:

时钟管理,如进程切换,获取时间信息,都依赖时钟管理,如一个程序的时间分片结束之后,要切换下一个程序,而如果某个程序要进行系统资源调用,运行在用户态的程序已经无法满足需求,我们需要切换到内核态,经过一定的调度后,该系统资源准备就绪,通过I/O控制器会给操作系统发出一个中断信号,从用户态切换到内核态,这个过程就是中断处理的过程,也是唯一实现的方法。除此之外,中断还有很多其他的分类。

进程

现代操作系统的特性决定了每个应用程序都需要分配一定的资源,如CPU,内存等,系统自然要生成一种数据结构称为PCB(进程控制块),来描述进程信息。

进程有三种基本状态,运行态,就绪态和阻塞态,还有两种额外状态,创建和终止。


需要注意的是,因为进程资源都是独立分配的,所以他们所拥有的内存地址空间都是互相独立的,因此进程通信就是很必要的。

一般来说,通信方式有共享内存,这个很好理解。

有管道,即一个用与链接独写进程的一个共享文件,在内存中开辟一块缓存区,需要注意的是pipe是半双工通信,即只能单向,实现全双工需要两个 pipe。

还有消息传递等,如通过中间件实现发布订阅模式等。

其他

内存是硬件设备与CPU沟通的中转站,程序执行前需要先放到内存中才能被CPU处理。

内存分配分为连续分配和非连续分配,连续分配是指用户进程分配的必须是一个连续的内存空间。

文件其实是一组数据的集合,整个文件系统可以看作一个树结构。

其他还有IO控制设备等。

参考文章

看这里

撸一撸简单的操作系统知识相关推荐

  1. 手撸一款简单高效的线程池(五)

    在之前的内容中,我们给大家介绍了 C++实现线程池过程中的一些常用线优化方案,并分析了不同机制使用时的利弊.这一篇,是线程池系列的最后一章.我们会介绍一下 CGraph 中的 threadpool 如 ...

  2. 2017菜鸡C与C++工程师总结,撸码撸码,垃圾专科生撸码人生

    前言 年底了,对工作做一个总结.又要感叹那句话啊,时光流水,仿佛昨天才刚毕业,到今天不知不觉已经正式工作半年了.文章以po主自己的心理想法和所见所闻入手来写,垃圾专科生,文笔不好勿怪.开始正文吧. 关 ...

  3. 软件设计师-操作系统知识

    1.操作系统知识: 1.1基本概述 操作系统是一个大型的软件系统,是为了提高计算机系统资源(硬件和软件资源)的利用效率并方便用户使用的一组程序,这些程序可以用软件实现,也可以用固件(微程序设计)实现. ...

  4. 怎样写一个简单的操作系统?(原文标题: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) 收藏 举 ...

  5. 撸一撸Spring Framework-IoC-概述

    撸一撸Spring Framework-IoC系列文章目录 IoC概述 BeanFactory ApplicationContext BeanDefinition BeanWrapper 资源管理利器 ...

  6. 2021的最新操作系统知识梳理,建议收藏!

    推荐阅读: 这套Github上40K+star学习笔记,可以帮你搞定95%以上的Java面试 毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题 给跪了!这套万人期待的 SQL ...

  7. 撸一撸今年阿里,华为,百度,腾讯,美团,头条,滴滴等的面试题

    2019年被很多人称之为是互联网的寒冬.那我们就来撸一撸2019年截止到现在的一线大厂的面试题,看看这个2019对我们自己来说,是不是一个寒冬? 面试题整理包含阿里/华为/百度/腾讯/美团/头条/滴滴 ...

  8. 面试中的操作系统知识

    面试中的操作系统知识 同步和互斥,锁 举一个死锁的例子 进程和线程的区别 进程是资源分配的单元,线程是系统调度的单元 转自https://www.zhihu.com/question/25532384 ...

  9. 写一个简单的操作系统

    摘 要 如果一定要找出OS最重要的核心,那就是调度器,调度器本身即可以看作一个简单的操作系统,允许以周期性或单次方式来调用任务.从底层的角度看,调度器可以看作是一个由许多不同任务共享的定时器中断服务程 ...

最新文章

  1. 【Notes6】ajaxjson,校验用户名,自动提示,CORS,/swagger开发rest,Websocket,DNS
  2. ASP.NET Core on K8S学习初探(1)
  3. 如何更sql sever数据库表的所有者
  4. 基于B/S架构的故障模型
  5. 图像、帧、片、NALU(firstime)
  6. indy10 UDP实例
  7. 2019年新款iPhone高清渲染视频来了 强迫症慎点...
  8. C++socket编程(三):3.3 bind端口
  9. r语言去除字符串两端多余空格
  10. div中文字居中加粗
  11. 很不错的js幻灯片代码分享
  12. 关于body.clientHeight,body.clientWidht获取的不是可视高度的问题
  13. Unity物体跟随鼠标移动
  14. Navicat8.0注册码
  15. ffmpeg截取视频指定帧方法
  16. 不努力做事,隔壁老王 可想而知您将来必然是艰难的
  17. 删除 文件夹出现0x80070091错误提示目录不是空的.txt
  18. 聊聊Benchmark测试【转载】
  19. 漫画:程序员调bug的真实写照233
  20. windows10自动修复无法开机

热门文章

  1. 数字医疗产业论坛丨03期沪贵云上
  2. 【fake location破解版】加强版随风2.0定位助手使用方法
  3. 什么是Tick 数据?
  4. 【224】基本功能计算器
  5. 【转载】Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?
  6. 渡者 逆向通关分析报告【配置文件】
  7. 浅谈Spring IOC的理解
  8. Neo4j学习(2)--简单入门
  9. 浅谈 MySQL 连表查询
  10. 计算机科学英语 --- 持续更新中(2018/10/18)