zoukankan      html  css  js  c++  java
  • 操作系统引论

    1.操作系统概论

    用户与操作系统进行交互的程序:基于文本的是shell,基于图形的是GUI
    应用程序(浏览器等)——>用户接口程序——>操作系统——>硬件

    操作系统直接服务的是应用程序,应用程序可以与操作系统及其抽象打交道。
    操作系统为应用程序提供基本抽象。(从上往下看)
    操作系统管理计算机复杂系统的各个部分(存储器,磁盘,网络接口及其它设备),操作系统的任务是在相互竞争的程序之间有序的控制对处理器,存储器以及其它I/O设备的分配。
    现代操作系统允许同时在内存中运行多道程序,很明显多道程序不可以同时输出结果,会混乱,那么操作系统可以对这个过程有序化。
    操作系统也负责解决多个用户和程序之间互相冲突的资源请求。
    资源管理指的是实现在时间及空间上的复用(共享):时间上的复用:就是不同的程序或者用户轮流的使用某个资源,即操作系统会把比如CPU分配给某个程序使用一段时间,然后轮到下一个运行,经过另一段时间后,又会轮到第一个程序再次使用; 空间上的复用指的是每个程序都得到资源的一部分,通常会在若干运行程序之间分配内存,这样每个运行的程序都可以入驻内存,以便于比如说利用CPU。对于磁盘的分配也属于此列。

    2.计算机硬件简介

    1.处理器CPU
    是计算机的大脑,可以从内存中取出指令并执行
    CPU的基本周期是:首先从内存中取出指令,解码以确定其类型和操作数,接着执行之。之后接着取指,解码,执行下一条指令。直到程序完成。
    每个CPU都有一套可执行的专门指令集,由于访问内存以得到指令和数据所花费的时间比 执行指令花费的时间长很多,因此CPU之中都会有保存关键变量和临时数据的寄存器。
    除了通用寄存器之外,还有其它专用寄存器,比如程序计数器,堆栈指针和程序状态字。
    操作系统必须知晓所有的寄存器,在对CPU的时间复用之中,操作系统会中止正在运行的某个程序并启动另一个程序,在中止一个程序的时候,操作系统必须保存所有的寄存器值,在该程序再次运行时可以把这些值重新录入。
    现在的CPU都可以同时取多条指令,同时解码和执行,不同CPU采用的策略不同。

    多线程和多核芯片:
    多线程允许CPU保持两个不同的线程状态,然后在纳秒级的时间尺度内来回切换(线程是一种轻量级进程)。多线程并不提供真正的并行处理,在一个时间内只有一个进程在运行,但是线程的切换时纳秒数量级。
    多线程的优势在于,每个线程对于操作系统来说就像一个单独的CPU,假如一共有两个CPU,每个运行两个线程,效果如同有四个CPU独立运行。
    当然现在出现了多核芯片,即一个芯片上有多个小芯片,每个小芯片都是一个单独的CPU。另外还有GPU,它的处理能力更强,但主要用于图像应用中,很难把操作系统放在上面。

    2.存储器
    根据存储速度快慢排列:寄存器——高速缓存——主存——磁盘
    寄存器和CPU一样快,其存储容量在64为CPU中为64*64位,程序必须自己设定如何使用寄存器。
    高速缓存:缓存主要把一些文件的一部分/ip地址等存入其中,以防止反复调用。
    主存是存储器的主力,也被称为RAM。
    磁盘:磁盘成本低。

    3.I/O设备
    一般包含两个部分:设备控制器和设备本身。
    控制器是电路板上的一块芯片,物理的控制设备,从操作系统中接收命令(例如从设备读取数据)。
    每类设备的控制器都是不同的,需要不同的软件来控制,这也就是设备驱动程序。

    启动计算机:
    每台计算机都有一个母板,上面存储着一个BIOS程序,每次计算机启动的时候,BIOS开始运行,它会检查硬件设备(RAM,键盘等),操作系统会询问BIOS以获得配置信息(尤其是驱动信息),若不存在问题,操作系统会把设备驱动程序调入内核,初始化表格,创建进程和登录GUI。

    3.操作系统基础概念:

    进程:
    进程process本质上是正在执行的一个程序,与每个进程相关的是地址空间(从最小值的存储位置到某个最大值的存储位置的列表),在这个地址空间之中,进程可以进行读写,与进程相关的还有该地址空间中存储的可执行程序,程序的数据以及程序的堆栈,相关的资源集(寄存器,清单等)。
    进程是容纳一个程序所需要所有信息的容器。
    在某一时刻,电脑可能正在同时运行三个活动进程:视频编辑器,web浏览器和电子邮件接收程序。操作系统会周期性的挂起一个进程然后运行另一个进程,这是因为之前的那个进程已经用完了分配给它的时间片,在挂起时,所有的相关信息都要保存下来(比如指向文件当前位置的指针)。与一个进程有关的所有信息都会存储在操作系统的一张表之中,这是进程表,是数组或链表结构。
    一个被挂起的进程包括:进程的地址空间和对应的进程表项。
    与进程管理最相关的系统调用是进程创建和进程终止,shell进程负责从终端上读命令,当用户键入一条命令要求编译一个程序,shell必须创建一个新的进程与执行编译程序,当该进程结束时,它执行一个系统调用来终止自己。
    若一个进程可以创建多个子进程,而子进程又可以创造新进程,那么就会得到进程树。
    当限定的时间要到达的时候,操作系统会向进程发送一个警告信号,此信号会让进程暂时挂起。
    每个进程都会有一个UID。

    地址空间:
    用来存储和保护正在执行的程序。

    文件:
    操作系统会把磁盘和I/O的操作系统转化为抽象文件模型。创建/删除/读写文件都需要系统调用。
    文件系统中存在目录这个概念,从而可把文件分成组,,目录层结构中的每一个文件都可以通过从目录的顶部即根目录开始的路径名来确定,绝对路径名包含了从根目录到该文件的所有目录清单。另一个概念叫工作目录,是在当前目录之下的相对路径。
    在读写文件之前,先打开文件,检查访问权限,若许可,系统会返回一个文件描述符,否则就是一个错误码。
    有一些特殊文件,这些文件是把I/O设备都抽象成文件。

    shell:
    操作系统是进行系统调用的代码。
    编译器,汇编程序,命令解释器等很重要但都不是操作系统的一部分。
    unix的命令解释器就是shell,它是终端用户与操作系统之间的接口,除非用户使用的是图形用户界面。
    有很多种的shell(sh,csh,ksh,bash).

  • 相关阅读:
    Android开发之修改Manifest中meta-data的数据
    Android开发之StrictMode
    Cookie默认不设置path时,哪些请求会携带cookie数据
    Servlet中的请求转发
    AndroidCamera开发学习笔记01
    AsyncTask源码解读
    Android Studio自定义签名文件
    Kotlin:Android世界的Swift
    C# 传值给C++
    .NET CLR 运行原理
  • 原文地址:https://www.cnblogs.com/shiji-note/p/14391577.html
Copyright © 2011-2022 走看看