*** 作系统真象还原——一些你可能正感到迷惑的问题

 *** 作系统真象还原——一些你可能正感到迷惑的问题,第1张

*** 作系统真象还原——一些你可能正感到迷惑的问题 第0章 一些你可能正感到迷惑的问题
    定义:
    *** 作系统是控制和管理计算机软硬件资源,合理组织和调度计算机的工作任务和资源分配,进而为用户和其他软件,提供接口和环境的程序集合。作用:
    *** 作系统提供用户进程访问系统资源的接口,并且同时也限制用户进程对系统资源的恶意修改运行:
    *** 作系统一直在不停的造表、填表和查表,其中各种记录表的作用是进行状态记录,并根据表使用算法进行宏观预测(提前调度算法),提高资源利用率和系统吞吐量特点:
    不同的任务交给专门的功能模块负责,提高资源利用率和运行效率CPU控制外设的方式

    内存映射:将外设存储映射到一定的物理内存空间,CPU通过访问该内存区域与外设通信端口控制:CPU通过访问IO接口与外设通信(本质是访问IO接口的寄存器,即端口)

对于显卡的控制使用内存映射+端口控制两种方式结合

    软件的统一性

    CPU对应用程序和 *** 作系统的访问都是通过去 CS:IP 寄存器执行内存取指令并执行实现的用户态(特权3级)和内核态(特权0级)是针对CPU来说的 用户进程陷入内核态:
    由于内部或外部中断的发生,当前进程被暂时终止执行,其上下文被内核的中断程序保存起来,开始执行一段独立于应用程序的内核代码内存访问

    CPU通过将地址写入地址总线进行内存访问CPU采用段基址+段内偏移使读入内存的整块程序可以进行重定位(访问地址改变,但是内容不变),即段基址改变但加上段内偏移访问的内容不变 突破寄存器的16位限制
    CPU在硬件设计上,地址部件自动将段基址左移4位后再与段内偏移相加构成20位地址多段模型

    多段模型下代码分段是程序员自己划分的若处理器支持分页的虚拟内存机制,则 *** 作系统也会采用分页模型为了内存对齐所产生的间隙是在数据段中的,程序段的指令间在逻辑上没有间隙(jmp跳过间隙),可以顺序执行 程序分段的好处

    进行属性划分,划分出只读属性的代码段和可写属性的数据段(属性在GDT中进行描述)局部性原理,提高CPU缓存命中率相同代码段进行统一使用,节省内存空间 平坦模型

    4G内存空间为一段段内数据和代码仍然分割存放,但是访问方式统一 物理地址

    物理地址是内存每个存储单元的唯一标识,CPU对内存最终都要使用物理地址去访问在实模式下,段基址+段内偏移称为物理地址 线性地址(虚拟地址)

    在保护模式下,选择子+段内偏移称为线性地址,选择子是对应GDT中段描述符的索引无论在实模式还是保护模式下,段内偏移总是有效的逻辑地址虚拟地址需要进行地址转换才能成为物理地址 段重叠

    不同的段基址+段内偏移访问的是同一个内存空间,eg: 0+3=2+1 段寄存器

名称作用CS 代码段寄存器Code Segment Register存储代码段基址DS 数据段寄存器Data Segment Register存储数据段基址ES 附加段寄存器Extra Segment Register附加数据段的段基址,但也可用作其他值的存储FS附加段寄存器Extra Segment Register用途不固定GS附加段寄存器Extra Segment Register附加数据段的段基址SS堆栈段寄存器Stack Segment Register堆栈段的值

32位的CPU有两种不同的工作模式:实模式和保护模式实模式下,装入段寄存器的是具体物理地址的段基址保护模式下,装入段寄存器的是段选择子

    工程=实际代码+环境配置

    Linux和Windows之间的应用程序不能互相在对方的 *** 作系统下运行

    主要是格式和系统API不同,API应用程序编程接口Application Programming Interfacewindows下是可执行程序是PE格式的,API使用动态链接库文件DLL实现的Linux下的可执行程序是elf格式的,API使用int0x80的软中断实现的

    局部变量和函数参数放在栈中,全局变量放在数据段中,堆是程序运行中用于动态内存分配的内存空间

    语言运行速度的比较

    任何语言编写的程序最终都要编译出来机器指令给CPU运行,但是往往更加抽象的语言冗余代码多,安全性和可读性强

    内存排序

    内存是以字节为单位进行读写的小端存储是数值的低字节放在内存低地址,方便进行强制类型转换大端排序是数值的高字节放在内存低地址,方便进行符号位判断

    中断

    CPU内部的事件称为异常,CPU外部的事件称为中断DOS和BIOS都是在实模式下运行的程序,使用软中断指令int调用中断向量表中进行实现的BIOS也是软件,进行硬件接口的调用来实现自身的功能

    Section和Segment的区别

    section称为节,是指在汇编代码中由关键字section和segment修饰并进行逻辑划分的指令数据区域segment称为段,链接器根据目标文件中属性相同的多个section合并后产生的section集合编译程序时,属性相同的section会合并放到segment中

    魔数:让人迷惑不知其意的数,linux就是通过不同文件系统自身的魔数进行分辨的

    CPU的运行

    CPU所要运行的下一条指令存储在 CS : IP 中改变所要运行的指令流,需要同时改变CS和IP两个寄存器,而mov不能同时对两个寄存器 *** 作,所以使用原子 *** 作的jmp···

    指令

    指令格式规定了二进制01序列的 *** 作码和 *** 作数的划分CISC根据二八定律,只保留常用的那部分,设计成为RISC精简指令计算机指令集是一套具体的指令编码,微架构是指令集的物理实现方式

    库函数是用户进程和内核的桥梁

    .asm汇编文件封装基本功能函数 -> .h库函数文件调用汇编功能函数实现自身的复杂函数 -> .c文件调用库进行用户功能的实现普通的.c文件没有打印字符的功能,必须借助如提供的printf()函数include中<>表示导入指定目录下的标准库函数,” “ 表示导入自定义文件c文件编译生成汇编文件,汇编文件汇编生成.o文件,最后将所有目标文件链接成可执行文件

    美国信息交换标准代码ASCII

    不可见字符,共33个,ASCII码值为0~33,通常使用转义字符进行表达可见字符,共127个,ASCII码值为32~126

    计算机系统CPU控制权的交接

      计算机加电后运行BIOS(基本输入输出系统),进行简单的硬件检测和初始化工作BIOS到硬盘最开始的0盘0道1扇区(约定好的)读取MBR(主引导记录),一般为512字节MBR遍历到分区表中的活动分区后,将CPU控制器交给该分区的OBR系统引导记录OBR的前三个字节存放跳转指令,跳转到 *** 作系统所在的内核加载器内核加载器加载内核后,将控制权交给 *** 作系统

    MBR是分区工具创建维护的,不属于 *** 作系统的管理范畴,但 *** 作系统能读写任何地址包括MBR

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5704707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存