【操作系统学习笔记】(二)引论学习心得

文章目录


今天抽时间看完了《现代操作系统》的第一章,尝试回答一下课后题中的问题来巩固一下吧~。(这只是个人的主观想法,答案有些答非所问,也不一定对,日后看到后续章节也许会对同一问题有新的认识)

操作系统的两大主要作用

  • 资源管理:有效地管理系统的各个部分
  • 拓展:为用户提供比实际机器更便于运用的抽象。

9种类型的操作系统及其应用

大型操作系统

数据中心的大型机(虽然我没亲眼见过)

服务器操作系统

特点:通过网络服务。
服务器我租了个轻量的云的,普通操作的话(比如打打命令),除了没有GUI界面,和自家电脑没什么区别,要论其功用,还是部署东西会比较多。

多处理器操作系统

多个cpu连接成单个的系统。(cpu———处理器)

似乎现在的云服务器也分1核 2核的。

个人计算机操作系统

平时在用的windows

掌上计算机操作系统

手机上的安卓系统,华为手机的鸿蒙系统

嵌入式操作系统

用于控制设备,不允许用户安装软件
所有软件都保存在ROM中(在我课设设计指令机的时候,用ROM保存要用到的汇编代码),程序之间不存在保护。

传感器节点操作系统(对我来说是新知识)

以前以为传感器就是感知温度、湿度并且保存并传送数据的感应器,没想到——它也是一种小型计算机,内建无线电电池驱动,每个传感器节点都配有CPU,RAM,ROM等。
如TinyOS

实时操作系统

将时间作为关键参数,不允许用户安装软件
这是从定义上区分的,非功能上。

  • 硬实时系统:如汽车装配流水线,一分一秒都不能出差错
  • 软实时系统:允许偶尔出差错,不会引起永久性损害。
    如数字音频或多媒体系统。

智能卡操作系统

(我不太了解这块,就不bb了)

分时系统和多道程序系统的区别

这都是第三代操作系统的概念,其中分时系统是多道程序系统的变体。

  • 多道程序设计将内存分为几个部分,每一部分存放不同的作业(homework直译),如果内存中同时存放足够多的作业,cpu利用率可以接近100%(当然,需要硬件来物理隔离和保护)
  • 分时系统:每个用户都有一个联机终端,cpu分配给有需要的作业轮流执行。

每次缓存一个cache行,而不是一个字节或一个字的好处是什么?

  • 学计算机组成原理的时候,讲到高速缓存和三种映射方式,直接相联,组相联,全相联。
  • 高速缓存的存在,是为了缓解快速的cpu和慢速的存储器之前的冲突。

至于为什么一定是一整行?也许是因为不多不少刚刚好 ?我也没有很明确的答案,不过如果将来面试真的问到了,可以结合以上这两点聊一聊的吧?

早期的多道程序设计方式直接由cpu处理字节读写,有何意义?

我认为应该是提高cpu效率吧。
对于科学计算来说,本来就是cpu操作密集的,采用这种方式都是因为I/O操作少消耗小,如果再经由点中间程序或步骤,效率就低了。

为何访问I/O设备相关的指令是特权指令?(只能在内核态运行而不能在用户态运行)

我的理解:用户态能接触到的东西其实都比较上层和表面,像输入输出设备是计算机的重要组成部分之一,稍有差错对整个系统的影响是巨大的。书中也提到,用户态中I/O和内存保护的指令都是禁止的。

OS/360计算机思想消亡了吗?

原著作者认为,他写下这书的时候还没有。
思想的变体正用于管理大型数据库、作为Web站点服务器。

下两个问题跳过。

内核态和用户态的区别?

多数cpu都分为这两种模式。
其中,内核态下可以执行指令集中的每一条指令,并且使用硬件的每种功能。
用户态下有关I/O和内存保护的所有指令都是禁止的,也不允许将psw模式位直接设为内核态。

我认为分这两个态主要考虑到权限问题。
原则上不应该让用户(客户、程序员、程序)直接接触到操作系统底层细节,比如启动操作系统需要完成的步骤。

只能在内核态中使用的指令

根据前面的“用户态下有关I/O和内存保护的所有指令都是禁止的”,应该是d 改变存储器映像吧。

后面几条计算的题就先跳过了哈~

第16题,大意调用者阻塞是否会持续到磁盘传送完成?

书上指出,如果系统调用不能执行,count都会被置为-1,全局变量errno中放入错误号。
所以我觉得应该不会持续吧?

陷阱指令的含义及其用途

陷阱指令与过程调用指令类似。
我认为其最大的用途在于切换(书中说的 “陷入” )到内核态。

它所跳转的地址实际上是指定的(或直接给定地址,或字段指向的索引含有目的地址)

分时系统中为什么需要进程表?

进程表:数组或链表结构,记录被挂起的进程的所有信息,当前存在的每个进程都要单独占用一个位置。
单一进程不需要进程表的原因:没有进程被挂起。

在非空目录安装文件系统的可行性?

书中以将CD-ROM(compact disc read only memory,只读光盘)上的文件系统安装到硬盘为例:
文件系统几乎总是安装在空目录上,这是因为在目标目录安装了文件系统后,该目录下的其他文件将无法被访问(因为该目录指向了CD-ROM的 根目录 ,而CD-ROM因为没有可指定的路径而无法被访问)

如果要在非空目录下安装文件系统,则是希望这些不能被访问的文件起备份、检查之类的作用(系统管理员应该有办法使得这些文件被访问的,比如复制到新地址或者更改目录地址巴拉巴拉,具体细节我也不太懂…)

引起三种系统调用失败的条件

  • fork :fork用于创建一个原有进程的精确副本,但是之后父进程和子进程是互不相干的,这说明两者有各自独立的空间。失败的条件应该就是空间(内存)不够了吧。
  • exec:一般而言,exec有三个参数(将要执行的文件名称,指向变量数组的指针,指向环境数组的指针),个人认为这三个条件有一个 不满足应该都不行吧,特别是第一个,比如文件名不存在,文件路径找不到,存在了找到了也无法被执行(如访问权限问题、文件本身的性质问题等等)。
  • unlink:
    首先理解link是什么,结合书上的插图理解,比如一个文件原来只在b目录下,现在经过link,它也出现在a目录下(也可以同一目录下,但一般是用于放在不同目录下),并且还可以叫别的名字,(这和直接copy是有区别的,从后续进展来看,类似于深拷贝和浅拷贝的问题。直接copy之后,对a文件的修改不会影响到b文件(这一点小伙伴们交过那么多实验报告应该深有体悟了,肯定模板存一处,最终作业存一处),但是link(由于实际只有一份文件),所以一处修改,处处见变化。

但是unlink很神奇的地方在于,它移走了其中一份,其他的又还在(我认为实际应该像名字所暗示的一样,是将对同一份文件在不同目录下的 关联 取消了,用户在该目录下查找不到该文件的信息了,但只要有一个关联还在,该处就还能看到)。
所以当所有的link都被移除之后,该文件会从磁盘中被移去。

多路复用

  • 时间:打印机
  • 空间:内存、磁盘
  • 都有:CPU
    (这几个是书上提的,键盘和显示器我觉得应该是都有吧,至于网卡,不太了解,不多bb了)

在count = write(fd, buffer,nbytes);调用中,是否能将函数返回值传递给 count变量而不是nbtes变量?如果能,为什么?

其实我不太理解这个题目是什么意思?是相当于问我如果写入失败会怎样吗?
如果写入成功,返回的是指定的nbytes(写入字节的长度),如果失败,就返回1(失败有很多原因,比如文件无法打开,磁盘满了)

关于lseek的程序阅读题

有一个文件,其文件描述符是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中展现的图景,这里取什么名字其实不重要的,严格来说根本没有名字,只有地址,而地址是不会重复的,所谓的名字是给我们看的而已,也是为了方便写程序。

现代操作系统将进程的地址空间从机器物理内存中分离出来的好处?

  • 虚拟内存的存在可以解决这样一个问题:(解耦)
    进程拥有比计算机拥有的主存还大的空间,但该进程希望使用全部的内存。
    具体解决方式:部分地址空间装入主存,部分留在磁盘上,需要时来回交换它们。

  • 一个进程本质上是正在执行的一个程序,如果是简单的操作系统,内存中一次只能运行一个程序;较复杂的操作系统允许内存中同时运行多道程序,这需要物理硬件层面的保护和分割,在操作系统的理念层面可体现为虚拟内存,将实际的内存 映射 成 一个个独立的内存地址。

程序员有必要了解是哪一个库导致了系统调用吗?

我觉得如果是做上层应用开发的,其实完全不了解底层也没什么,但如果是做偏底层开发的,了解原理,能写出使程序运行性能更佳的代码(不需要系统调用的应该会更快吧),所谓厚积薄发,打好基础对长久职业生涯也有帮助。

将UNIX下的程序转换到Windows下会不会有问题?

唔其实我没试过,我猜应该会引起一些意想不到的错误吧?

为什么建立一个完全可移植的操作系统是不可行的?

我觉得,是因为现在的操作系统本身就是庞大但又多多少少有一些问题,需要不断修补的,无论是原系统还是新系统都是,就算当下真的可以移植,改一点东西又不行了。而且,市场和商业方面也有一定原因吧,基于linux内核已经延伸出了很多新版本,这些表兄弟之间的标准都尚且不统一(而且当下似乎已经有各玩各的态势了),更别提另辟蹊径的windows。

基于微内核的操作系统 策略与机制分离的好处

先说结论:可以使内核更小。
实现一种算法思想,机制由内核完成,策略由用户态完成,

虚拟机缺点?

卡!耗资源!

剩下几个不太懂就不乱bb了。

补充:


操作系统的几种结构

单体系统:

Windows下的动态链接库(DLL)

层次化系统

THE(1968)

微内核

MINIX3

客户端-服务端

这个概念不陌生,特别是TCP通信用得多。

虚拟机

我在电脑上装了个VMWare,里面有华为openGauss的镜像。直接在虚拟机上操作挺慢的,一般都是用putty连接上去。

这本书提到了 “第一类虚拟机管理程序(type1 hypervisor)”和“第二类虚拟机管理程序(type1 hypervisor)”的概念,让我知道了原来虚拟机不止有VMWare和VirtualBox这两个,还有其他的收获:

  • 为什么某些cpu硬件无法实现虚拟机?
    因为硬件实际上陷入到了虚拟机中(即需要硬件的支撑),而某些cpu试图在用户态执行特权指令时,该指令会被忽略掉。
  • 模拟器和虚拟机是不同的。
    模拟器的雏形是:即时翻译大量代码,将其存储到内部高速缓存并在其再次执行时复用。
  • type1 hypervisor与type 2 hypervisor的真正区别:
    前者没有底层支持,必须自行实现所有功能,必须在原始硬盘分区上自行管理存储;后者利用宿主操作系统及其文件系统。

Java虚拟机(JVM)

JVM是Java程序员必须深入了解的一块知识,这里不再赘述了吧,一次编译,到处运行的跨平台优势很明显了。

外核

对机器进行分区。
原来每个虚拟机都认为自己有独立磁盘,因此需要维护一张映射表;但外核的思想就是直截了当地告知虚拟机它拥有的只是一小块资源。
因此不需要再重映像磁盘地址,减少了映像层。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值