热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

现代操作系统:第一章引言

现代计算机由一个或多个处理器、主存、磁盘、打印机、鼠标、显示器、网络接口以及各种其他输入输出设备组成。多数计算机有两种运行模式:内核态和用户态。软件中最基本的部分是操

现代计算机由一个或多个处理器、主存、磁盘、打印机、鼠标、显示器、网络接口以及各种其他输入/输出设备组成。多数计算机有两种运行模式:内核态和用户态。软件中最基本的部分是操作系统,它运行在内核态。

在这里插入图片描述

操作系统由硬件进行保护,防止用户试图对其进行修改 操作系统和普通软件的主要区别,如果用户不喜欢某个特定的应用软件,用户可以重新写一个软件。但是不能自行写一个属于操作系统中的一部分的时钟中断处理程序。因为这个程序是由硬件保护,防止用户试图对它进行修改。


1.1 什么是操作系统

操作系统就是一种运行在内核态的软件

操作系统的作用概括起来主要有两个方面的作用:


  1. 操作系统创建好的抽象,并且实现和管理它所创建的抽象对象。
  2. 记录哪个程序在使用什么样的资源,对资源请求进行分配,评价使用代价,并且为不同的的程序和用户调解互相冲突的资源请求。

另外,对于操作系统的理解,从不同角度看的,有不同的定义,

自顶向下看:操作系统为应用程序提供基本抽象,从而使应用程序在此基础上可以组合功能。

自底向上看:操作系统用来管理复杂系统的各个部分,对资源的请求进行分配,调节不同程序见相互冲突的资源请求。

资源管理包括以下两种不同的复用方式实现多路复用共享资源:在时间上复用和在空间上复用。


  • 在时间上复用:当一个资源在时间上复用时,不同的程序或用户轮流使用它。
  • 在空间上复用:每个客户都得到资源的一部分,从而取代了客户排队。

1.2 操作系统的历史

第一代:真空管和穿孔卡片

第二代:晶体管和批处理系统

第三代:小规模集成电路和多到程序设计

第四代:个人计算机(大规模集成电路)

第五代:移动计算机(手机、平板等)


1.3 计算机硬件简介

操作系统地作用:操作系统扩展了计算机指令集并且管理计算机资源。

在这里插入图片描述


1.3.1 处理器

计算机的大脑是CPU,它从内存中取出指令并且执行它。在每个CPU基本周期内,首先从内存中取出指令,解码以确定其类型和操作数,接着执行它,然后取指、解码并执行下一条指令。按照这一方式,程序被执行完成。

所有的CPU内部都有一些用来保存关键变量和临时数据的寄存器。

对程序员可见的专用寄存器:


  • 程序计数器:它保存了将要取出的下一条指令的内存地址。
  • 堆栈指针:它指向内存中当前堆栈的顶端,该栈包含了每一个执行过程的栈针。

CPU取出指令执行的机制,是通过内部的取指单元、解码单元、执行单元三部分完成。为了提高效率。现在CPU通常可以同时取出多条指令。当CPU执行指令n时,它可以正在对指令n+1解码,并读取指令n+2,这样,当执行完指令n后,无需等待,就可以直接执行n+1,然后n+2,这样的机制,称为流水线(pipeline)。

在这里插入图片描述

多数CPU有两种模式,即前面提到的内核态和用户态:


  1. 当在内核态运行时,CPU可以知悉指令集中的每一条指令,并且使用硬件的每种功能。在台式机器和服务器上,操作系统在内核态中运行,从而可以访问整个机器。
  2. 用户程序在用户态中运行时,仅仅运行执行整个指令集的一个子集和访问所有功能的一个子集。在用户态中有关I/O和内存保护的所有指令是禁止的。

多核体系架构和多线程

在这里插入图片描述


1.3.2 存储器

典型的存储层次结构及其一个大概的访问时间如下:

在这里插入图片描述

存储器中的顶层是CPU中的寄存器

下一层次为高速缓存,CPU读取数据时,如果数据在高速缓存行中,则成为高速缓存命中。提升高速缓存命中有利于提升效率。

再下一次是主存。主存通常称为随机访问器。


1.3.3 磁盘

下图是常见的机械硬盘结构:

在这里插入图片描述

在任意一个给定臂的位置,每个磁头可以读取一端环形区域,称为磁道。把一个给定的臂的位置上的所有磁道合并起来,组成了一个柱面。每个磁道可以分为若干扇区。

现如今,许多计算机中支持一种著名的虚拟内存机制。这种机制使得期望运行大于物理内存的程序称为可能,器方法是将程序放在磁盘上去,而将主存作为一种缓存,用来保存最频繁使用的部分程序。


1.3.4 I/O设备

I/O设备一般包括两个部分:设备控制器和设备本身。设备控制器的任务是为操作系统提供一个简单的接口。

每类设备控制器都是不同的,所以需要不同的软件进行控制。专门与控制器对话,发出命令并接受相应的程序,称为设备驱动程序

实现输入输出有三种方式:


  1. 第一种,用户程序发出一个系统调用,然后就执行I/O过程,CPU一直等待I/O的数据,直到得到数据后处理,处理完以后返回结果,CPU才继续处理其他事情。这种方式称为忙等待。

  2. 第二种是通过中断机制。设备驱动程序启动并让设备在操作完成时发出一个中断。设备驱动程序在这个时刻立即返回。操作系统接着在需要时阻塞调用者并安排其他工作进行。当设备驱动程序检测到该设备的操作完毕时,它发出一个中断通知操作完成。

  3. 第三种,使用直接存储器访问芯片(DMA,Direct Memory Access),直接控制位流,可以控制在内存和某些控制器之间的位流,而无须持续的CPU干预。


1.3.5 总线

总线就是CPU连接其他设备的线,各种设备间的数据传输通过总线完成。

在这里插入图片描述


  • 共享总线架构表示多个设备使用一些相同的导线传输数据。
  • 并行总线架构表示通过多条导线发送数据的每一个字。(PCI总线)
  • 串行总线架构通过一条被称为数据通路的链路传递了集合了所有位的一条消息,这非常像网络包。(PCIe总线)

PCIe恰好相反,它使用分离的端到端的链路。


1.3.6 启动计算机

通电后,系统首先启动BIOS里面的程序, BIOS全称基本输入输出系统(Basic Input Output System), 内部包含了一下基本的参数设置,以及接下来要启动的程序,从而把系统启动起来。


1.4 操作系统大观园(各种操作系统)

操作系统有很多,主要有:大型机操作系统、服务器操作系统、多处理器操作系统、个人计算机操作系统、掌上计算机操作系统、嵌入式操作系统、传感器节点操作系统、实时操作系统、智能卡操作系统。


1.5 操作系统概念

操作系统中有很多基本概念和抽象,它们是需要理解的核心内容,主要有:进程、地址空间、文件、I/O(输入输出)、保护、shell.


1.5.1 进程

进程的本质是正在执行的一个程序。可以简单理解一个进程就是一个程序,但有时,一个程序包含多个进程。进程是对CPU处理器的一个抽象概念,可以把进程看做一个资源调度的集合,通常包含的资源有:寄存器(程序计数器和堆栈指针)、打开文件的清单、突出的警报、有关进程的清单以及程序需要的其他信息。

与每个进程相关的是地址空间,这是从某个最小值的存储位置到每个最大值的存储位置的列表。在这个地址空间中,进程可以进行读写。该地址空间中存放有可执行程序、程序的数据以及程序的堆栈。

一个进程包括:进程的地址空间和对应的进程表项(其中包括寄存器以及稍后重启该进程所需要的许多信息)。

若一个进程能够创建一个或者多个进程(或称为子进程),而且这些子进程又能创建子进程,则很容易就形成进程树。合作完成某些作业的相关进程经常需要彼此之间进行通信以便同步完成他们的工作,这就是进程间的通信

在这里插入图片描述


1.5.2 地址空间

计算机的主存用来保存正在执行的程序,为了找到程序在主存(也就是内存)的位置,物理内存设置了对应的地址编号,地址编号的一个集合就是地址空间。 物理地址空间是有限的,这是设备决定的,不过有虚拟地址空间技术。地址空间这个概念其实就是对内存的一个抽象,用来方便管理内存及进程。

该进程在执行的时候,看到和使用的内存都是虚拟内存地址。

对于32位的操作系统,该虚拟地址空间位2^32 位4GB


1.5.3 文件

文件这个概念的抽象是为了描述数据的集合,这个比较好理解。在现实中的文件其实就是某些资料装订在了一起,这些资料通常保存的也是某些数据(文字、图表等)。

在UNIX中有一个重要的概念是特殊文件。提供特殊文件是为了使I/O设备看起来像文件一样。这样的特殊文件有两种:


  • 块特殊文件:那些可以随机存取的块组成的设备,如磁盘等
  • 字符特殊文件:字符特殊文件用于打印机、调制解调器和其他接受或输出字符流的设备。

管道:管道是一种虚文件,它可以连接两个进程。当进程A想对进程B发送数据的时候,它把数据写到管道上,仿佛管道就是输出文件一样。进程B可以通过读取该管道而得到数据,仿佛管道就是一个输入文件一样。

在这里插入图片描述


1.5.4 输入/输出 I/O

主要是指输入输出设备,通过这些设备来输入或输出数据, 比如键盘、打印机等。键盘输入字母,就可以在硬盘或者其他位置输出文字。


1.5.5 保护

计算机有大量信息,用户希望对其进行保护。对一个文件来说,通常有三种状态,可读(只能读取,不可修改),可写(只能写入,不可读出),可读可写。

rwxr-x–x 的含有是对于用户所有者是可读、可写、可执行。对于同一个组的用户可以读、和执行。对于其他用户只能执行。对于一个目录来说,x的含义是运行查询。


1.6 系统调用

先简单了解下系统调用的流程,下图是调用一个read方法的过程:

在这里插入图片描述

然后是一些常用的调用函数:

在这里插入图片描述


1.6.1 用于进程管理的系统调用

在这里插入图片描述


1.6.2 用于文件管理的系统调用


1.6.3 用于目录管理的系统调用


1.7 操作系统结构


1.7.1 单体系统

整个操作系统以单一程序的方式运行,所有过程链接成一个大型可执行二进制程序


1.7.2 层次式系统

整个系统分了很多层,每一层都进行一些封装,再给上一层次调用,从而可以加入一些限制进行保护。


1.7.3 微内核

微内核的设计思想是,为了实现高可靠性,将操作系统划分为小的、良好定义的模块,只有其中一个模块—微内核—运行在内核态,其余的模块由于功能相对较弱,则作为普通用户进程运行。

在这里插入图片描述


1.7.4 客户端-服务器模式


1.7.5 虚拟机


推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • B站服务器故障影响豆瓣评分?别担心,阿里巴巴架构师分享预防策略与技术方案
    13日晚上,在视频观看高峰时段,B站出现了服务器故障,引发网友在各大平台上的广泛吐槽。这一事件导致了连锁反应,大量用户纷纷涌入A站、豆瓣和晋江等平台,给这些网站带来了突如其来的流量压力。为了防止类似问题的发生,阿里巴巴架构师分享了一系列预防策略和技术方案,包括负载均衡、弹性伸缩和容灾备份等措施,以确保系统的稳定性和可靠性。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有