//甜橙 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
这些都是软件的逻辑