(中文配音)为什么应用程序是特定于操作系统的?
合集 · 直观理解计算机技术【CoreDumped】 (68)
-
代码中指定变量类型为何如此重要?
11:03
-
栈为何如此之快?
13:46
-
堆为何如此之慢?
17:53
-
动态数组的内部机制(ArrayList VS LinkedList)
19:56
-
探索计算机并发与多任务处理的历史
15:37
-
晶体管是如何运行代码的?
12:54
-
晶体管是如何记忆数据的?
16:12
-
制作一个CPU来运行程序
18:47
-
计算机如何将字符串转换为数字
11:23
-
动态随机存取存储器(DRAM)的工作原理
17:18
-
计算机处理器是如何运行条件和循环的?
16:05
-
一个程序不是一个进程
6:51
-
深入理解进程,如何进行上下文切换?计算机科学中最深刻和最成功的想法之一。
14:52
-
处理器内部的单个位如何保护操作系统的完整性?
20:20
-
计算的心跳:时钟如何推动 CPU 前进?
13:14
-
英语原声版-计算的心跳:时钟如何推动 CPU 前进?
14:22
-
(英语原声)进程间通信:共享内存或发送消息
14:15
-
(中文配音)进程间通信:共享内存或发送消息
12:29
-
(中文配音)为什么单核处理器需要线程?
14:59
-
(英语原声)为什么单核处理器需要线程?
16:07
-
(中文配音)多核系统上的线程
9:26
-
(英语原声)多核系统上的线程
11:27
-
(中文配音)为什么应用程序是特定于操作系统的?
11:52
-
(英语原声)为什么应用程序是特定于操作系统的?
13:09
-
(英语原声)硬件如何在多任务处理中协助软件?
13:15
-
(中文配音)硬件如何在多任务处理中协助软件?
11:29
-
链表的一个实际应用
20:34
-
让你的电脑运行更流畅的奇妙算法
45:02
-
(流畅中文配音)让你的电脑运行更流畅的奇妙算法
43:38
-
(原声双语字幕)当程序调用 sleep() 时会发生什么?
19:41
-
(流畅中文配音)当程序调用 sleep() 时会发生什么?
17:57
-
这个简单算法驱动了真正的解释器:Pratt Parsing
20:40
-
(双语字幕)编程中最难以捉摸的Bug:竞态条件
18:19
-
(流畅中文配音)编程中最难以捉摸的Bug:竞态条件
19:23
-
(中文配音)阻止内存攻击的底层电路
16:02
-
(英语原声)阻止内存攻击的底层电路
14:51
-
为什么有些项目会使用多种编程语言?
18:04
-
为什么有些项目会使用多种编程语言?
19:32
-
别再杀进程了!让 Ctrl+C 变成“喵”……(用信号实现)
17:15
-
别再杀进程了!让 Ctrl+C 变成“喵”...(用信号实现)
19:23
-
80 年代避免竞态条件的算法(以及它为何失败)
19:05
-
80 年代避免竞态条件的算法(以及它为何失败)
19:43
-
CPU如何与众多不同设备交互?
22:10
-
(中文配音)CPU如何与众多不同设备交互?
23:52
-
(中文配音)你每天都在用的奇特CPU操作
14:04
-
你每天都在用的奇特CPU操作
13:04
-
(中文配音)历史如何塑造了我们今天仍在使用的编程术语?
18:04
-
(英语原声)历史如何塑造了我们今天仍在使用的编程术语?
17:42
-
为什么有些底层项目里会充满这种奇怪的代码?
16:41
-
(中文配音)为什么有些底层项目里会充满这种奇怪的代码?
16:39
-
编译与解释代码如何共处同一程序中?
21:35
-
(英语原声)编译与解释代码如何共处同一程序中?
21:30
-
【双语字幕】Core Dumped 常见问题的集中回答
17:09
-
【双语字幕】90年代的设计决策阻碍了Python并行化
13:36
-
【中文配音】90年代的设计决策阻碍了Python并行化
12:01
-
Linux创建进程的奇怪方式
17:51
-
【中文配音】Linux创建进程的奇怪方式
18:14
-
CPU如何运行函数?
19:49
-
【中文配音】CPU如何运行函数?
19:38
-
没有人解释的问题:内核的边界在哪里?
17:15
-
【英语原声】没有人解释的问题:内核的边界在哪里?
19:36
-
硬件如何让线程问题不再那么棘手?
35:49
-
为什么在macOS、Windows和Linux上安装应用程序如此不同?
19:47
-
游戏公司真的能破坏你的电脑吗?
24:00
-
一个视频说透“架构”:为什么你的程序换个CPU就可能跑不了?
10:43
-
CPU如何执行有符号和无符号运算?
14:45
-
简单指令, 奇妙算法
19:11
-
当CPU遇到它不认识的指令,会发生什么?😱【底层原理】
9:26
Description
这段视频主要讨论了为何不同操作系统上的程序无法直接运行的原因。 首先,程序不仅与 CPU 架构相关,还与操作系统密切相关。即使硬件相同,不同操作系统的系统调用(system calls)实现方式也存在差异,这会导致兼容性问题。 视频讲解了系统调用的工作原理:用户程序通过触发中断进入内核模式,请求操作系统执行硬件相关任务。操作系统通过系统调用表来识别用户的请求,每个调用都有独特的编号和参数传递方式。然而,不同操作系统的调用表及参数传递规范可能不同,导致同一程序在不同平台上无法运行。 此外,视频还提到应用二进制接口(ABI)对于程序兼容性的重要性。ABI 定义了二进制代码在特定操作系统和架构上的交互规则。即使解决了系统调用差异,操作系统间的可执行文件格式(如 Linux 的 ELF 和 Windows 的 PE 格式)以及运行时环境要求也可能导致程序运行失败。 总结来说,操作系统之间的底层实现差异,包括系统调用、ABI 和可执行文件格式等,使得跨平台运行成为一项复杂的挑战。 ps:视频为个人学习所收集,为方便快速理解,通过chatgpt将视频原英文配音翻译校准后转成中文配音,原视频地址为:https://www.youtube.com/watch?v=eP_P4KOjwhs
Comments
安卓程序就能在鸿蒙上运行
♥ 399 ↩ 41
应用程序:系统调用() 操作系统:歪比巴博()是什么东西?
♥ 204 ↩ 2
说白了就是二进制格式和syscall方式不一样,二进制win是pe linux是elf,win是kernel32.dll里面的ntcall和zwcall,linux是syscall,还有abi的差异,微软有自己定义的一坨abi,linux一般是sysv64
♥ 151 ↩ 5
做一个壳子,把Windows和Linux套在一起,这样就可以运行两个系统的程序了,就像大脑分左右一样,由壳子负责启动应用,判断适应的系统环境,然后转给相关系统程序处理,两个系统相互内存隔离、芯片隔离、核心隔离,资源通过壳子分配各占一半,只通过壳子传递两个系统的磁盘操作信息和内存数据交换。
♥ 84 ↩ 31
所以浏览器是统一接口的产物[doge_金箍]
♥ 76 ↩ 5
可以加一层转译层 比如Java
♥ 73 ↩ 7
不同系统上编写的代码很少有能跨平台的,其实就是因为大部分人编码都没考虑过跨平台,我碰见好几次了,用c++17的filesystem,结果还是fopen,fclose到处用,结果就是代码完全不能在windows上运行,写的一坨
♥ 69 ↩ 22
就是软件层不能直接调用硬件层得靠系统层去转接。硬件通过固件和驱动告知操作系统自己的身份和使用方法,系统再将软件请求转换为硬件操作对吧。我好奇内核能被我们用户改变吗,我买了一个win内核编程的书想知道自己能不能创建服务。[打call]
♥ 69 ↩ 12
考虑到我们正在服务器上运行JavaScript 蚌埠住了
♥ 45 ↩ 1
应用都是建立在操作系统上的,而对于stm32裸机编程,则没有应用一说。
♥ 31 ↩ 4
所以我的暴论是正确的,离开了操作系统,九成以上的软件基本都是残疾儿童,基本就是缺胳膊少腿的[嗑瓜子][藏狐]
♥ 24 ↩ 32
接口不同,参数也不一样,Windows提供的是int2eh和sysenter,Linux提供的是int80h和syscall
♥ 18 ↩ 3
因为应用打包方式不一样,签名要求不一样,指令集架构不一样,系统库不一样,syscall不一样…
♥ 14
实际上也有通过模拟运行时环境和对应的系统调用来实现兼容另一种操作系统的,比如wine、wsl1等,也有类似waydroid这种直接复用宿主系统的linux kernel提供安卓运行时环境的解决方案
♥ 12
端越来越多(PC, 安卓,iOS,小程序,AR,车机,手表…),只有js能实现真正跨平台
♥ 12 ↩ 13
把应用程序设计成网页,运行时自动调用系统的浏览器内核!这样是不是就可以跨平台使用了[脸红]
♥ 10 ↩ 12
那可不可以把ios,linux,win的指令集函数都实现兼容,那是不是就可以运行三套系统的软件了[doge]
♥ 10 ↩ 7
编译型程序:系统你怎么不会编。 解释型程序:虚拟机你解释的好慢。 指令型程序:我只能是操作系统的程序。
♥ 9
不懂就问,运行Javascript怎么了[笑哭][笑哭]
♥ 9 ↩ 7