数据中心的大型机(虽然我没亲眼见过)
特点:通过网络服务。
服务器我租了个轻量的云的,普通操作的话(比如打打命令),除了没有GUI界面,和自家电脑没什么区别,要论其功用,还是部署东西会比较多。
多个cpu连接成单个的系统。(cpu———处理器)
似乎现在的云服务器也分1核 2核的。
平时在用的windows
手机上的安卓系统,华为手机的鸿蒙系统
用于控制设备,不允许用户安装软件。
所有软件都保存在ROM中(在我课设设计指令机的时候,用ROM保存要用到的汇编代码),程序之间不存在保护。
以前以为传感器就是感知温度、湿度并且保存并传送数据的感应器,没想到——它也是一种小型计算机,内建无线电电池驱动,每个传感器节点都配有CPU,RAM,ROM等。
如TinyOS
将时间作为关键参数,不允许用户安装软件
这是从定义上区分的,非功能上。
(我不太了解这块,就不bb了)
这都是第三代操作系统的概念,其中分时系统是多道程序系统的变体。
至于为什么一定是一整行?也许是因为不多不少刚刚好 ?我也没有很明确的答案,不过如果将来面试真的问到了,可以结合以上这两点聊一聊的吧?
我认为应该是提高cpu效率吧。
对于科学计算来说,本来就是cpu操作密集的,采用这种方式都是因为I/O操作少消耗小,如果再经由点中间程序或步骤,效率就低了。
我的理解:用户态能接触到的东西其实都比较上层和表面,像输入输出设备是计算机的重要组成部分之一,稍有差错对整个系统的影响是巨大的。书中也提到,用户态中I/O和内存保护的指令都是禁止的。
原著作者认为,他写下这书的时候还没有。
思想的变体正用于管理大型数据库、作为Web站点服务器。
下两个问题跳过。
多数cpu都分为这两种模式。
其中,内核态下可以执行指令集中的每一条指令,并且使用硬件的每种功能。
用户态下有关I/O和内存保护的所有指令都是禁止的,也不允许将psw模式位直接设为内核态。
我认为分这两个态主要考虑到权限问题。
原则上不应该让用户(客户、程序员、程序)直接接触到操作系统底层细节,比如启动操作系统需要完成的步骤。
根据前面的“用户态下有关I/O和内存保护的所有指令都是禁止的”,应该是d 改变存储器映像吧。
后面几条计算的题就先跳过了哈~
书上指出,如果系统调用不能执行,count都会被置为-1,全局变量errno中放入错误号。
所以我觉得应该不会持续吧?
陷阱指令与过程调用指令类似。
我认为其最大的用途在于切换(书中说的 “陷入” )到内核态。
它所跳转的地址实际上是指定的(或直接给定地址,或字段指向的索引含有目的地址)
进程表:数组或链表结构,记录被挂起的进程的所有信息,当前存在的每个进程都要单独占用一个位置。
单一进程不需要进程表的原因:没有进程被挂起。
书中以将CD-ROM(compact disc read only memory,只读光盘)上的文件系统安装到硬盘为例:
文件系统几乎总是安装在空目录上,这是因为在目标目录安装了文件系统后,该目录下的其他文件将无法被访问(因为该目录指向了CD-ROM的 根目录 ,而CD-ROM因为没有可指定的路径而无法被访问)
如果要在非空目录下安装文件系统,则是希望这些不能被访问的文件起备份、检查之类的作用(系统管理员应该有办法使得这些文件被访问的,比如复制到新地址或者更改目录地址巴拉巴拉,具体细节我也不太懂…)
但是unlink很神奇的地方在于,它移走了其中一份,其他的又还在(我认为实际应该像名字所暗示的一样,是将对同一份文件在不同目录下的 关联 取消了,用户在该目录下查找不到该文件的信息了,但只要有一个关联还在,该处就还能看到)。
所以当所有的link都被移除之后,该文件会从磁盘中被移去。
其实我不太理解这个题目是什么意思?是相当于问我如果写入失败会怎样吗?
如果写入成功,返回的是指定的nbytes(写入字节的长度),如果失败,就返回1(失败有很多原因,比如文件无法打开,磁盘满了)
有一个文件,其文件描述符是fd,内含下列字节序列:3,1,4,1,5,9,2,6,5,3,5。有如下系统调用:
lseek(fd, 3, SEEK_SET);
read(fd, &buffer, 4);
其中lseek调用寻找文件中的字节3。在读操作完成之后,buffer中的内容是什么?
lseek三个参数及其含义:(文件描述符,文件位置,文件位置性质(起始?当前?末尾?))
第二个参数是3说明从第3个开始读(数组下标从0开始,源自于底层的设计理念),连续读四个字符:1,5,9,2
我认为应该是零散和连续的区别。
块是可自由存取的,比如就访问第x块;
而流是连续的。
在高级语言中,如果出现方法/变量名相同的情况,遵循就近原则吧。优先在当前域中找,没有了再到全局中找。
不过到了图1-17中展现的图景,这里取什么名字其实不重要的,严格来说根本没有名字,只有地址,而地址是不会重复的,所谓的名字是给我们看的而已,也是为了方便写程序。
虚拟内存的存在可以解决这样一个问题:(解耦)
进程拥有比计算机拥有的主存还大的空间,但该进程希望使用全部的内存。
具体解决方式:部分地址空间装入主存,部分留在磁盘上,需要时来回交换它们。
一个进程本质上是正在执行的一个程序,如果是简单的操作系统,内存中一次只能运行一个程序;较复杂的操作系统允许内存中同时运行多道程序,这需要物理硬件层面的保护和分割,在操作系统的理念层面可体现为虚拟内存,将实际的内存 映射 成 一个个独立的内存地址。
我觉得如果是做上层应用开发的,其实完全不了解底层也没什么,但如果是做偏底层开发的,了解原理,能写出使程序运行性能更佳的代码(不需要系统调用的应该会更快吧),所谓厚积薄发,打好基础对长久职业生涯也有帮助。
唔其实我没试过,我猜应该会引起一些意想不到的错误吧?
我觉得,是因为现在的操作系统本身就是庞大但又多多少少有一些问题,需要不断修补的,无论是原系统还是新系统都是,就算当下真的可以移植,改一点东西又不行了。而且,市场和商业方面也有一定原因吧,基于linux内核已经延伸出了很多新版本,这些表兄弟之间的标准都尚且不统一(而且当下似乎已经有各玩各的态势了),更别提另辟蹊径的windows。
先说结论:可以使内核更小。
实现一种算法思想,机制由内核完成,策略由用户态完成,
卡!耗资源!
剩下几个不太懂就不乱bb了。
Windows下的动态链接库(DLL)
THE(1968)
MINIX3
这个概念不陌生,特别是TCP通信用得多。
我在电脑上装了个VMWare,里面有华为openGauss的镜像。直接在虚拟机上操作挺慢的,一般都是用putty连接上去。
这本书提到了 “第一类虚拟机管理程序(type1 hypervisor)”和“第二类虚拟机管理程序(type1 hypervisor)”的概念,让我知道了原来虚拟机不止有VMWare和VirtualBox这两个,还有其他的收获:
JVM是Java程序员必须深入了解的一块知识,这里不再赘述了吧,一次编译,到处运行的跨平台优势很明显了。
对机器进行分区。
原来每个虚拟机都认为自己有独立磁盘,因此需要维护一张映射表;但外核的思想就是直截了当地告知虚拟机它拥有的只是一小块资源。
因此不需要再重映像磁盘地址,减少了映像层。