目录
一、操作系统 OS 与内核 Kernel 有什么区别???
1.内核
2.操作系统
?二、如何在C++和Python间优雅的共享数据??
三、bug 排查大曝光,涉及Linux 内核的那种?
1.内核
????????内核仅仅是操作系统的一部分,是真正与硬件交互的那部分软件,与硬件交互包括读写硬盘、读写网盘、读写内存以及任何连接到系统中的硬件。
????????除了与硬件交互外,内核还负责以进程的形式来分配资源,分配什么资源呢?所谓资源就是硬件,比如CPU时间、内存、IO等等,这些都是资源。
????????每个进程都认为自己在独占CPU,这通过CPU时间片来实现,内核让CPU在各个进程之间快速切换,这样程序员写好程序员后直接运行即可,即使在单核系统中运行成百上千个进程都没有问题。
????????每个进程都认为自己在独占内存,这通过虚拟内存来实现。为什么都要虚拟化呢?答案显而易见,因为计算机系统内的资源是有限的,我们只有几个CPU核心、几个G的内存,但却要同时运行几百几千个进程,除此之外我们别无它法。
????????内核的职责就是以进程的形式来分配CPU时间,以虚拟内存的形式来分配物理内存,以文件的形式来管理IO设备。
2.操作系统
????????不同的操作系统可以有相同的内核。实际上我们熟悉的Linux只是内核而不能称得上是操作系统,Ubuntu则可以认为是操作系统,其内核是Linux;RedHat也是操作系统,其内核同样是Linux;我们可以看到,尽管Ubuntu和RedHat是不同的操作系统,但其内核可以是相同的。这就好比它们可以基于同样的底盘打造出不同的车型。
????????而我们熟悉的Windows也是操作系统,其内核是Windows NT内核。
????????操作系统需要提供两种接口:
????????任何一门语言都能处理字符串,而字符串有一个天然的优势,那就是自解释,self description,对于字符串"computer",只要提供该字符串所在的内存地址,任何一门语言写的代码都能正确处理该字符串。
????????我们需要定义字符串的格式,以一种标准化的形式来描述信息。格式化的字符串:Json(实际上XML也是可以的,只不过XML过于复杂)。
????????Json本质上就是字符串,但是有自己定义的格式,任何一门语言拿到Json定义的字符串后都能正确的解析出内容来,换句话说Json实际上是一种语言独立的(language-independent,这里的语言指编程语言)数据类型,不但利于人类阅读也利于机器解析。
????????Json语法非常的简单,但是使用Json你可以使用字符串来表示非常复杂的数据,一定要记住,Json是纯文本的。
????????在这里我们可以看到纯文本的力量,那就是通用性,二进制就不具备通用性,除非事先声明每一个字节是什么意义,也就是说二进制不具备自解释的特性。因此在进行系统设计时不要忘了简单但功能强大的纯文本。
????????进程看上去被卡死,那么:
- 如果被卡在用户态,那么该进程 CPU 使用率必然很高(死循环之类);
- 如果被卡在内核态,这时进程应该正在进行 IO 或者网络通信等,那么 CPU 使用率应该会很低。
|