1. POSIX(可移植操作系统接口)代表一组基于 Unix 的标准接口,并设计了一些能力扩展。
还有 System V、BSD。Windows 系统的主要编程环境/接口是 win32 API(应用程序接口),为
管理进程、线程、内存和外部设备提供了完成的函数集合。
每一个 Java 应用都唯一对应一个 JVM 实例,JVM 虚拟机内有自己的线程、进程结构,映
射到系统上。
不同种类计算机需要不同操作系统(嵌入式、华为大统一的鸿蒙)(linux 类操作系统本
质上还是看你选择了哪些内核模块等拼出来),比如大型机的操作系统主要是任务协作与充分
利用硬件。Linux 内核自己编译的话可以定制一些奇奇怪怪的特性,我想或许是对这句话的一
种解释。
2. 硬件对操作系统的正常运行(防几种恶意破坏方式)提供了机制:
CPU 实模式程序直接运行在物理内存上,直接操作物理内存,现在开机的时候还是先进入实模
式然后再进入保护模式,这种方式存在几个问题:
地址空间不隔离:程序操作相同地址空间会造成互相影响甚至崩溃,而且安全性也得不到
保证;
使用效率低:没有特别好的策略保证多个进程对超过物理内存大小的内存需求的满足;
程序运行地址不确定:程序运行时,都需要分配空闲区域,而空闲位置不确定,会带来一
些重定位问题;
访问的内存有限,好像是 1M
特权指令(提供指令集是 CPU 事情):
操作系统与 CPU 一起划分了 Ring0 操作系统内核层、Ring3 用户层,各层有不同的 CPU 指
令执行权限。这种级别存储在 CS(code)、DS(data)、SS(stack)、ES(extend)等段寄存
器的末尾 2bit。CPU 特权级别与操作系统用户无关。无论你是 Root 用户、管理员、来宾还是
普通用户,都没有关系。所有用户代码都在环 3 中运行,所有内核代码都在环 0 中运行,而不
管代码是代表哪个 OS 用户运行的。如果有异常将触发中断。系统调用(陷进),一种故意的
异常中断,root 用户有更多权限进行系统调用,调用内核中的代码来控制端口、网络等。所有
的中断处理程序都在 ring0(中断表就一个,内存地址 00000H~003FFH),中断是用户程序交
给操作系统内核处理,并存在 CPU 上下文切换(执行数据保存到 CPU cache 或者内存栈中,是
一次函数调用)。
CPU 保护模式(配合操作系统进行寻址方式的改变):1. 段式内存管理 只能访问段上内存禁
止对任意地址的访问(不过段的地址挺大的,分页使用虚拟地址之后才算安全):在段寄存器
(CS,DS,SS,ES)的基础上实现,改变段寄存器的功能,使其从一个单纯的段基址变成指向一个“段
描述符”的指针。CPU 能够对内存及一些其他外围设备做硬件级的保护。2.虚拟地址,让每一个
进程都以为自己独享内存,起到隔离作用并且相比实模式程序变得可移植。页式内存管理 将
虚拟地址映射成真实物理地址,所以可以认为与页式内存管理有关。
虚拟 8086 模式是运行在保护模式中的实模式,为了在 32 位保护模式下执行纯 16 位程序。它
不是一个真正的 CPU 模式,还属于保护模式。
3. Linux 对内存节点进行分区;将节点分为 DMA、Normal、High Memory 内存区;
DMA 内存区:直接内存访问区,通常为物理内存的起始 16M;主要供 I/O 外设使用,无
需 CPU 参与的外设和内存 DMA(方便访问 I/O 设备);
Normal 内存区:从 16M 到 896M 内存区;内核可以直接使用
Hight Memory 内存区:896M 以后的内存区;高端内存,内核不能直接使用
评论0
最新资源