• 【操作系统笔记】操作系统


    //甜橙 10:50:52
    dos语言原理的乐趣点在哪里

    Mapper 11:12:48
    dos语言是什么

    //甜橙 11:13:08
    就是在cmd里写的那种二极管语言

    Mapper 11:13:53
    哦 bat

    Mapper 11:13:58
    没有乐趣

    Mapper 11:14:06
    我没有学过

    //甜橙 11:14:25


    //甜橙 11:16:21
    不是 是有 mov 命令的那种东西

    //甜橙 11:16:26
    不是bat

    Mapper 11:16:53
    哦哦

    Mapper 11:17:05
    汇编语言

    Mapper 11:17:33
    汇编语言是对应  cpu指令

    Mapper 11:17:58
    像C/C++都要先编译为汇编

    Mapper 11:18:22
    Python 不用  但是Python解释器也是C++写的

    Mapper 11:18:54
    cpu是执行一条条指令

    Mapper 11:19:12
    汇编是这些指令的 人话版本

    Mapper 11:19:32
    飞人话 就是一些数字

    //甜橙 11:19:45
    乐趣在哪

    Mapper 11:20:11
    探索底层

    //甜橙 11:20:19
    明白了

    Mapper 11:22:41
    高级语言 的语法和机器无关
    汇编语言机器有关

    Mapper 11:23:10
    比如 不论arm   还是 intel
    都可以用同一个标准的C语言

    Mapper 11:23:16
    但是他们的汇编语言不一样

    Mapper 11:23:27
    因为cpu架构不一样
    指令不同

    Mapper 11:23:53
    同样的高级语言
    在不同平台编译时只要编译为不同汇编就行了

    //甜橙 11:23:58
    en

    Mapper 11:24:05
    汇编是直接操作cpu的

    //甜橙 11:25:26
    查了下 arm竟然可以不要操作系统

    Mapper 11:25:58
    操作系统也是个软件

    //甜橙 11:26:14
    没系统 怎运行

    Mapper 11:26:20
    但是cpu要跑 总要有软件

    Mapper 11:26:28
    你查的是怎么说的

    Mapper 11:27:25
    它是说 适合不跑操作系统

    Mapper 11:27:36
    不是说  只有它才能不跑操作系统

    Mapper 11:27:50
    如何cpu都可以不跑操作系统

    Mapper 11:27:53
    任何

    //甜橙 11:28:26


    Mapper 11:28:44
    操作系统也是个程序

    Mapper 11:28:54
    cpu要运行就要有程序

    //甜橙 11:28:58
    en

    //甜橙 11:29:12
    它现在说不跑 那么会对应什么程序

    Mapper 11:29:26
    程序也是指令组成的数据
    cpu是读一条指令  执行一下

    //甜橙 11:30:00
    en

    //甜橙 11:30:23
    就是说 对应的是指令集 没有打包成程序也可以

    //甜橙 11:30:40
    不过我想象不出应用端会是什么样子

    Mapper 11:34:04
    看怎么写

    Mapper 11:34:23
    不是

    Mapper 11:34:31
    操作系统是个很模糊的概念

    Mapper 11:34:45
    没有清晰的界限

    Mapper撤回了一条消息

    //甜橙 11:35:13


    Mapper 11:35:14
    它只是 功能比较多  然后启动比较早的软件

    Mapper 11:35:22
    因为启动比较早

    Mapper 11:35:42
    就有设置CPU的权力

    Mapper 11:35:54
    它利用这个权力控制后启动的程序

    //甜橙 11:36:07
    en

    Mapper 11:36:10
    比如禁止这些程序直接访问某些内存

    Mapper 11:36:25
    禁止这些程序执行一些cpu指令

    Mapper 11:36:32
    后面这些就是应用程序

    //甜橙 11:36:37
    en

    Mapper 11:36:55
    然后后面这些程序  为什么要打包为特定格式

    Mapper 11:37:14
    因为这样才符合前面这个大程序的规矩

    //甜橙 11:37:24
    en

    Mapper 11:37:36
    带有一些信息

    Mapper 11:37:45
    比如这个程序 入口在哪

    Mapper 11:37:51
    是exe 还是dll

    Mapper 11:38:00
    还是驱动程序

    //甜橙 11:38:04
    en

    Mapper 11:38:15
    就是这样

    Mapper 11:38:28
    所以,你说不安装操作系统

    Mapper 11:38:41
    那么直接执行的那个程序能不能叫操作系统

    //甜橙 11:38:47
    不是 我怀疑它是 可以造冰箱的那种东西

    Mapper 11:39:15
    你理解的操作系统

    //甜橙 11:39:30
    等等  单片机 也是要“操作系统”吗 还是只是控制电路的

    Mapper 11:39:31
    可能就是有个用户交互界面的 东西 

    Mapper 11:40:06
    因为单片机功能简单

    Mapper 11:40:18
    我们不会把上面的程序叫操作系统

    //甜橙 11:40:36
    这样说就清楚了

    Mapper 11:40:45
    但是理论上可以开发有操作系统特征的程序运行在单片机上

    Mapper 11:41:05
    操作系统特征
    我觉得有几个

    Mapper 11:41:50
    可以把其他程序从磁盘上加载到内存中执行

    可以和用户交互

    Mapper 11:41:56
    我觉得最基本是这两个

    //甜橙 11:42:14
    单片机的不能操作应用程序 吗

    Mapper 11:42:33
    单片机只一般是写死的一个程序

    //甜橙 11:42:35
    也可以啊 比如冰箱的 速冻按钮


    Mapper 11:42:47
    操作系统一般可以扩展

    //甜橙 11:43:04
    有道理

    Mapper 11:43:07
    可以扩展应用程序


    Mapper 11:44:10
    最早的操作系统

    Mapper 11:44:42
    一开始的电脑是一个程序执行完 插其他储存卡 执行其他程序

    //甜橙 11:45:09


    Mapper 11:45:19
    然后有人就做了一个程序
    其他程序执行完时,返回这个程序,这个程序加载下一个程序

    Mapper 11:45:28
    这就是操作系统雏形

    //甜橙 11:45:47
    这样说起来不是应用程序先产生嘛

    Mapper 11:45:54


    Mapper 11:46:00
    操作系统出现的比较晚

    Mapper 11:46:06
    一开始没有这个概念

    Mapper 11:46:11
    只有程序的概念

    Mapper 11:46:23
    就是管理其他程序的程序

    Mapper 11:46:31
    就是操作系统的雏形

    //甜橙 11:46:41
    en

    Mapper 11:46:47
    后来这个程序被设计得 可以和用户交互

    Mapper 11:47:15
    比如用户输入  aaa
    它就执行 被记录为aaa的程序

    Mapper 11:47:48
    然后执行完aaa后又继续执行这个操作系统

    Mapper 11:48:05
    就是说  如果aaa死循环

    Mapper 11:48:12
    就返回不了操作系统

    Mapper 11:48:21
    DOS就是这样

    //甜橙 11:48:28
    然后就发明了 任务管理器

    Mapper 11:49:07
    后来人们在计算机中安了时钟

    //甜橙 11:49:31
    en
    接下来执行 被记录为“干饭”的程序*^_^*

    Mapper 11:49:43
    几微秒发一个信号,使得cpu停止现在的应用程序

    Mapper 11:49:51
    返回操作系统的调度程序


    Mapper 11:50:08
    调度程序记录刚刚到程序运行到哪

    //甜橙 11:50:26
    en

    Mapper 11:50:27
    然后找到其他程序的记录 跑步执行其他程序

    Mapper 11:50:47
    这就是分时复用技术
    这里才开始有多线程

    Mapper 11:51:15
    先Windows这种有窗口的系统

    //甜橙 11:51:15
    原来如此

    Mapper 11:51:17


    Mapper 11:51:25
    必须基于多线程

    Mapper 11:51:51
    因为每个窗口都是不同线程

    编程时,程序员不可能考虑其他程序的窗口

    Mapper 11:52:19
    操作系统几微秒换一个线程执行

    Mapper 11:52:37
    每个任务感受不到这种切换


    Mapper 11:52:45
    因为它冰冻在那

    Mapper 11:53:02
    它因为CPU一直在执行它

    Mapper 11:53:04
    以为

    //甜橙 11:53:16
    停止时间技能

    Mapper 11:53:21
    是的

    Mapper 11:53:36
    就像存档
    Mapper 11:53:50
    cpu执行一个任务几微妙 存档

    Mapper 11:54:02
    然后读下一个档

    Mapper 11:54:24
    结束程序就是删档

    //甜橙 11:54:25
    我以为存档也是一个单任务

    //甜橙 11:54:36
    只是普通队列,不涉及停止

    Mapper 11:55:13
    这个调度  的程序

    Mapper 11:55:18
    叫做 核心

    Mapper 11:55:22
    操作系统核心

    //甜橙 11:55:33
    en

    Mapper 11:55:57
    然后被调度的一些必要的程序
    叫做 子系统

    Mapper 11:56:05
    其他程序 叫做应用程序

    Mapper 11:56:19
    比如窗口管理器 是子系统

    Mapper 11:56:24
    任务管理器 也是

    //甜橙 11:56:28
    en

    Mapper 11:57:01
    这些和应用程序都是被核心调度的

    //甜橙 11:57:13
    en

    //甜橙 11:57:31
    这是什么里面的知识 好像不来自汇编语言

    Mapper 11:57:39
    只是特权级别
    不会被关掉
    并且可能调度时优先调度

    Mapper 11:57:51
    操作系统的知识

    //甜橙 11:57:53
    en

    //甜橙 11:58:31
    “干饭”程序执行毕*^_^*

    Mapper 11:58:59
    当然,现在有多核cpu

    //甜橙 11:59:07
    en

    Mapper 11:59:19
    就能真的同时执行几个任务

    Mapper 11:59:43
    但是每个核还是要分时复用
    才够用

    Mapper 11:59:54
    因为可能有几千个线程

    //甜橙 12:00:14
    多线程时就能同时执行了吧

    Mapper 12:00:54
    只有一个核时 同一时间只能执行一个线程
    只是切换快 以为同时执行

    Mapper 12:01:06
    多核时 可以真的同时执行 几个线程

    Mapper 12:01:11
    但是也只是几个

    //甜橙 12:01:48
    哪里不对 一个核可以多线程对吗

    Mapper 12:02:18
    一个核多线程 是通过切换

    Mapper 12:02:28
    同一时间是一个线程

    //甜橙 12:02:41
    明白了

    Mapper 12:03:02
    如果多核  就是同一时间可能几个线程

    //甜橙 12:03:15
    en

    Mapper 12:04:18


    Mapper 12:04:26
    两个线程切换
    我设置很慢

    Mapper 12:04:41
    0.5秒切换一次

    Mapper 12:04:57
    一个线程打印红色条

    //甜橙 12:05:19


    Mapper 12:05:37
    红色要长一点

    Mapper 12:05:42
    因为红色先执行

    //甜橙 12:06:20


    //甜橙 12:06:30
    这里有个终止符蓝色



    Mapper 12:07:56
    不是终止符



    Mapper 12:08:07
    可能是显卡的工作模式的问题

    //甜橙 12:08:43
    en

    Mapper 12:10:15
    时钟发出的是中断信号

    Mapper 12:10:25
    不止时钟可以发出

    //甜橙 12:10:25
    en

    Mapper 12:10:31
    外设都可以

    Mapper 12:10:34
    比如键盘

    你撤回了一条消息

    //甜橙 12:11:10
    等等

    //甜橙 12:11:21
    这个“时间”怎么计

    Mapper 12:11:25
    芯片

    //甜橙 12:11:28
    不是世界时间对吧

    Mapper 12:11:30
    时钟芯片

    //甜橙 12:11:34
    而只是记录时段的东西

    Mapper 12:11:43
    这个不是cpu负者

    Mapper 12:11:52
    我也不知道怎么记

    //甜橙 12:12:13
    emm

    Mapper 12:12:16
    反正就是时钟定时发出一个中断信号

    Mapper 12:12:25
    中断信号有很多

    //甜橙 12:12:27
    可能用电流的某种数据计

    //甜橙 12:12:29
    en

    Mapper 12:12:53
    不同中断信号  会让指令指针调到不同地方

    //甜橙 12:13:05
    en

    Mapper 12:14:06
    比如x86cpu的时钟中断 是16进制70号
    这个中断信号 会让 cpu跳到  某个地方

    然后操作系统在这里安排了一个调度程序等着

    Mapper 12:14:22
    中断信号  也可以用指令发出

    //甜橙 12:14:47
    en

    Mapper 12:14:49
    线程可以主动通过中断信号让出 自己

    Mapper 12:14:57
    让核心切换

    //甜橙 12:15:12
    en

    Mapper 12:15:13
    这种方式叫协程

    Mapper 12:15:29
    一开始的Windows不是多线程
    是多协程

    Mapper 12:15:35
    靠应用程序自觉

    //甜橙 12:15:44
    就是说

    Mapper 12:15:47
    主动发出中断信号让出

    //甜橙 12:16:07
    协程是 中断控制技能在应用程序

    Mapper 12:16:13
    是的

    //甜橙 12:16:20
    多线程是 技能在 cpu

    Mapper 12:16:29
    多线程是在时钟

    Mapper 12:16:37
    是时钟发出中断信号

    Mapper 12:16:57
    多协程是   程序自己发中断信号

    //甜橙 12:17:06
    哦 那就是 一个在软件 一个在硬件 吗

    Mapper 12:17:11


    //甜橙 12:17:19
    en

    Mapper 12:17:22
    所以叫 软中断 和 硬中断

    Mapper 12:17:35
    还有就是调用

    //甜橙 12:17:39
    清晰

    //甜橙 12:17:44
    en

    Mapper 12:17:49
    应用程序调用操作系统的功能

    Mapper 12:17:55
    也是靠 软中断

    Mapper 12:18:02
    会切换到操作系统

    //甜橙 12:18:04
    en

    Mapper 12:18:09
    去执行某个功能

    Mapper 12:18:14
    比如打印字符

    //甜橙 12:18:27
    en

    Mapper 12:18:35
    现在的操作系统

    //甜橙 12:18:45
    en

    Mapper 12:18:49
    应用程序一般访问不了硬件

    Mapper 12:19:01
    所以好的功能要靠操作系统代理

    //甜橙 12:19:15
    en

    Mapper 12:19:20
    应用程序  软中断 到操作系统
    操作系统去做

    Mapper 12:19:44
    没有中断就没有操作系统

    //甜橙 12:19:47
    明白,权力收归中央

    Mapper 12:20:07
    单片机虽然简单也有中断

    //甜橙 12:20:14
    en

    Mapper 12:20:30
    可能主要是硬中断

    //甜橙 12:20:50
    en

    Mapper 12:21:00
    比如开冰箱门

    Mapper 12:21:06
    可能会产生中断

    //甜橙 12:21:14


    Mapper 12:21:15
    然后程序执行中断例程

    //甜橙 12:21:23
    什么东西中断

    Mapper 12:22:05
    单片机有引脚嘛

    Mapper 12:22:26
    有些引脚是中断引脚

    Mapper 12:22:46
    连接什么芯片 什么芯片就能发出中断信号

    //甜橙 12:22:49
    en

    Mapper 12:23:36
    比如这个芯片可以检测有没有开门,一开门就发一个中断信号给单片机

    //甜橙 12:23:51
    en

    Mapper 12:24:02
    检测这些就不懂了

    Mapper 12:24:26
    像键盘

    //甜橙 12:24:28
    我只知道 冰箱 是开机后就不准断电的

    //甜橙 12:24:35
    断电会损耗冰箱

    Mapper 12:24:39
    嗯嗯

    //甜橙 12:24:44
    en

    Mapper 12:24:51
    像键盘

    Mapper 12:24:58
    一般按键

    //甜橙 12:24:58
    en

    Mapper 12:25:25
    不论按下 弹起 会产生一个60h号中断

    Mapper 12:25:38
    h是16进制的意思

    //甜橙 12:25:49
    en

    Mapper 12:25:59
    然后中断后进入操作系统的 某个例程

    Mapper 12:26:07
    这个例程是操作系统自定义的

    //甜橙 12:26:24
    en

    Mapper 12:26:26
    告诉cpu 如果 中断信号是60h 就跳来这里

    Mapper 12:26:33
    这种叫做中断例程

    //甜橙 12:26:52
    en

    Mapper 12:27:18
    然后这个中断例程 知道要去哪个io端口 取数据
    比如这里是40h号端口

    Mapper 12:27:33
    从这里知道你按了什么键

    //甜橙 12:27:46


    Mapper 12:27:48
    获取到的是键盘发来的扫描码

    Mapper 12:28:02
    io端口是一种内存地址

    //甜橙 12:28:07
    en

    Mapper 12:28:11
    通向外部设备

    //甜橙 12:28:28


    Mapper 12:28:39
    按下 弹起

    Mapper 12:28:43
    扫描码不同

    //甜橙 12:28:54
    en

    Mapper 12:29:03
    比如你按了shift

    //甜橙 12:29:12
    en

    Mapper 12:29:58
    它接收到 按下shift
    中断例程就认为进入大写模式

    Mapper 12:30:17
    直到以后接收到弹起shift的扫描码

    Mapper 12:30:28
    就认为进入小写

    //甜橙 12:30:45
    en

    Mapper 12:30:53
    驱动程序

    Mapper 12:31:12
    就是和这些io端口打交道的

    Mapper 12:31:19
    应用程序访问不了

    Mapper 12:31:26
    驱动程序是特权程序

    //甜橙 12:31:27
    长按效果如何

    Mapper 12:31:43
    长按不产生中断

    Mapper 12:32:11
    持续输入的效果是软件实现的

    //甜橙 12:32:11
    比如长按住shift可以写小写

    Mapper 12:32:25
    大写吧

    //甜橙 12:32:32
    en,大写

    Mapper 12:32:38
    因为没有接收到shift弹起

    Mapper 12:32:50
    接收到才恢复小写

    //甜橙 12:33:18


    Mapper 12:33:30
    并不是一直按着一直产生连续中断

    Mapper 12:33:33
    没有必要

    //甜橙 12:34:00
    可能每个键不一样?

    //甜橙 12:34:22
    比如删除按钮,长按它可以不停地删除

    Mapper 12:34:32
    那是软件的效果

    Mapper 12:34:50
    软件没有等到你弹起delete

    Mapper 12:35:08
    就一段时间执行一次删除

    Mapper 12:35:28
    并不是一直按着一直有输入

    Mapper 12:35:32
    没有必要

    //甜橙 12:35:45
    可能明白

    Mapper 12:36:00
    或者说 软件认为

    Mapper 12:36:15
    一个键没有弹起
    就是一直输入

    Mapper 12:36:22
    这些都是软件的逻辑


     

  • 相关阅读:
    Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件
    如何在 Spring 或 Spring Boot 中使用键集分页
    Django-Import-Export插件控制数据导入流程
    python unittest以及coverage report
    springboot+avue医院绩效考核系统源码
    CSS实现文字描边效果
    阿里云张新涛:连接产业上下游,构建XR协作生态
    本周大新闻|苹果首款MR重在验证市场需求,Pico 4更多参数曝光
    使用Nodejs和Express构建http响应流实现下载功能
    2022-08-19 mysql/stonedb聚合aggregate多线程并行化-概要设计
  • 原文地址:https://blog.csdn.net/drifefish/article/details/125597447