IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> CS:APP/深入理解计算机系统-第一章(1.7~1.7) -> 正文阅读

[游戏开发]CS:APP/深入理解计算机系统-第一章(1.7~1.7)

1.7 The Operating System Manages the Hardware

简单来说程序——操作系统——硬件设备三者之间的关系:操作系统是位于程序和硬件设备之间的软件层,简单示意图如下:

?操作系统可以起到两个主要的作用:

????????1.保护硬件不会被应用程序滥用

? ? ? ? 2.为应用程序提供简单、统一的机制,用于方便操作复杂且差异很大的底层(low-level)硬件设备。

操作系统通过下图所示的抽象来实现这两个作用:

?files是IO设备的抽象,virtual memory是main memory和IO设备的抽象,processes是全部三者的抽象。

1.7.1 Processes(进程)

这是一个很6的概念,process是操作系统对于运行一个程序program的抽象。多个process可以同时在一个系统上运行,每一个process似乎都在自己使用硬件设备。“同时”的意思是一个process的指令和其他另一些process的指令交错执行。

对于传统的system,一次只能执行一个程序program,对于新的system,例如有多核处理器的,可以同时跑多个程序。在这两种情况下,通过在进程之间切换处理器,单个的CPU也可以执行并发的进行。操作系统一般通过context switching来执行这种切换。为了简化学习,在本节中讨论的都是单CPU的uniprocessor system。

操作系统会跟踪process运行所需要的所有状态信息,可以起个名叫做context,包括PC的当前值,register file和main memory的content(翻译成内容还是容量?不太清楚)。在任意时刻,一个uniprocessor system只能执行单个进程process的code。当这个system打算切换进程的时候,它首先会保存当前进程的context,然后restore新进程的context,接着把控制权交给新的process。新的process就会从它停止的地方开始运行。

下面结合图简单理解一下:

目前有两个并发进程processA和B,分别是shell进程和hello进程。在最开始的时候,shell等待我们的输入,当我们让它调用hello程序时,shell就携带相应的信息让操作系统做些动作。操作系统保存了shell进程的context,创建了新的hello进程和相应的context,然后把控制权交给了hello程序。在hello程序完事之后,操作系统restore了shell进程,然后把控制权交还给shell。最后shell等待下一次输入。

从图中看到,从一个进程到另一个进程的转换是由kernel管理,这个kernel是操作系统代码中始终驻留在内存里的。当应用程序需要操作系统执行某些操作的时候,例如read或write一个file,它就执行一个call指令,把控制权给kernel。然后kernel执行request操作并且返回应用程序。注意,kernel不是一个单独的进程,它是系统用来管理所有进程的代码和数据结构的集合。

1.7.2?Threads(线程)

虽然通常认为一个进程process里面只有一个控制流,但现在的系统里面,一个进程实际上可以由多个执行单元组成,每个执行单元叫做线程。每个线程都在进程的上下文中运行(run in the context of the process),并且不同线程之间共享相同的代码和数据。

现在网络服务器对并发的要求越来越多,所以线程越来越重要。这是因为在多个线程之间共享数据比在多个进程之间共享数据更容易,并且线程比进程更加高效。多线程还可以使程序在多个处理器可用时运行的更快

1.7.3?Virtual Memory

虚拟内存是一种抽象,它为每个进程提供了一种illusion,让进程觉得它自己使用了main memory。每个进程都有统相同的内存统一视图,叫做virtual address space(虚拟地址空间)。这个虚拟地址空间的简单示意如下图所示(假设是Linux系统)

在Linux里面,地址空间的最顶端区域是为操作系统中所有进程通用的代码和数据保留的。地址空间的下面部分的区域保存用户进程定义的代码和数据。注意,图中的地址从下到上递增。?

每个进程看到的虚拟地址空间由许多区域组成,每个区域都有特定的用途。下面从低地址开始逐步向上介绍每一个部分:

  • Program code and data.
    • 对于所有的进程,代码从相同的固定地址开始,然后是和全局C变量相关的data locations。代码区和数据区从可执行对象文件的内容直接初始化。
  • Heap
    • 代码区和数据区后面紧跟着run-time堆。堆会在运行时动态的展开和收缩。
  • Shared libraries
    • 靠近地址空间中间的区域存放共享库(例如C标准库和数学库)的代码和数据。
  • Stack
    • 在用户的虚拟地址空间的顶部是编译器用来实现函数调用的user stack(用户栈)。用户栈在程序运行期间动态的展开和收缩。具体来说,调用函数时栈会增长,从函数返回时栈会收缩。
  • Kernel virtual memory
    • 定址空间的顶部区域是为kernel保留的。应用程序不允许读写该区域的内容,也不允许直接调用内核代码中定义的函数,只能通过调用内核来执行这些操作。

为了让virtual memory工作,硬件和操作系统软件之间需要复杂的交互,包括处理器生成的每个地址的硬件转换。基本思想是把进程虚拟内存的内容存储到磁盘disk上,然后使用main memory作为disk的缓存。

?1.7.4?Files

一个file就是一系列byte。每个IO设备,包括硬盘,键盘,显示器甚至network,都可以建模成一个file。系统的所有输入和输出都可以是read和write一个file,借助于一组成为unix IO的系统调用。

这种简单却有效的概念是很强大的,它为应用程序提供了系统中可能包含的不同IO设备的统一视图。例如同一个程序会在使用不同磁盘技术的不同系统上运行。

------------

1.7的有点多,先不看1.8了,好好消化一下。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 12:05:58  更:2021-10-08 12:06:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:29:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码