操作系统进程描述

这是操作系统进程系列文章第二篇-操作系统进程描述 进程 什么是进程 在给进程下定义前,先考虑以下几个概念: 一个计算机平台包括一组硬件资源:比如处理器、内存、I/O 模块、定时器和磁盘驱动器等。 计算机程序是为执行某些任务而开发的。典型情况下,它们接受外来的输入,做一些处理后,输出结果。 直接根据给定的硬件平台写应用程序效率是低下的 开发操作系统是为了给应用程序提供一个方便、安全和一直的接口。操作系统是计算机硬件和应用程序直接的一层软件,对应用程序和工具提供了支持。 可以把操作系统想象为资源的统一抽象表示,可以被应用程序请求和访问。资源包括内存、网络接口和文件系统等。 有了上述概念,现在就可以讨论操作系统怎样以一个有序的方式管理应用程序的执行,以达到以下目的: 资源对多个应用程序是可用的 物理处理器在多个应用程序间切换以保证所有程序都在执行中 处理器和 I/O 设备能得到充分的利用 现代操作系统采用的方法都是依据对应于一个或多个进程存在的应用程序执行的一种模型。 关于进程有很多定义: 一个正在执行的程序 计算机中正在运行的程序的一个实例 可以分配给处理器并由处理器执行的一个实体 由单一的顺序的执行线程、一个当前状态和一组相关的系统资源所描述的活动单元 进程状态 一个被执行的程序,操作系统会为该程序创建一个进程或任务,并且控制进程的执行。 简单来说,程序只有两种状态:运行态、未运行态。 当操作系统创建一个新进程时,它将该进程以未运行态加入到系统中,操作系统知道进程的存在,并等待执行机会。 当前运行的进程不时中断,操作系统的分派器将选择一个新进程运行。 前一个进程从运行态转换到未运行态,另一个从未运行态转换到运行态。 同时,未运行的进程需保持在某种类型的队列中,并等待它们的执行时机。 上图中的排队图可以描述分派器的行为:被中断的进程转移到等待进程队列中,或者,如果进程以及结束或取消,则被销毁。在任何一种情况下,分派器均从队列中选择一个进程来执行。 通过这个模型,可以看出操作系统需要用某种方式来表示每个进程,使得操作系统能够跟踪它,也就是说需要有一些与进程相关的信息,包括进程在内存中的状态和位置,即进程控制块。 进程控制块 进程在任意时间都可以唯一地被表征为以下元素: 标识符:存储在进程控制块中的数字标识符,包括(次进程的标识符-进程 ID,父进程标识符,用户标识符-用户 ID) 状态:进程状态(如运行态,就绪态,等待态等) 优先级:用于描述进程调度优先级的一个或多个域。 程序计数器:程序中即将被执行的下一条指令的地址 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享内存块的指针 上下文数据:进程执行时处理器的寄存器的数据 I/O 状态信息:包括显示的 I/O 请求、分配给进程的 I/O 设备和被进程使用的文件列表等 记账信息:可能包括处理器时间总和、使用的时钟数总和、时间限制、记账号等。 这些信息被存放在一个叫进程控制块的数据结构中,它由操作系统创建和管理。进程控制块是进程存在的唯一标志,也就是说任何一个进程只要进程创建了它就一定有一个跟它相对应的进程控制块,进程结束了进程控制块就会被操作系统回收,进程在执行的过程对进程的所有操作都是通过进程控制块来实现的。 进程创建和终止 进程除运行和未运行外,在进程的生命周期中,创建和终止都是不可避免的。 进程创建 通常有4个事件会导致创建一个进程: 新的批量作业 交互登录。终端用户登录到系统 操作系统因为提供一项服务而创建。操作系统可以创建一个进程,代表用户程序执行一个功能,使用户无需等待。 由现有进程派生。基于模块化的考虑,或者为了开发并行性,用户程序可以指示创建多个进程。 当一个进程派生另一个进程时,前一个称为父进程,被派生的被称为子进程。 一旦操作系统决定创建一个新进程,它就会按以下步骤进行: 给新进程分配一个唯一的进程标识符。 给进程分配空间。 初始化进程控制块。 设置正确的连接。(例如,如果操作系统把每个调度队列都保存成链表,则新进程必须放置在就绪或就绪/挂起链表中)。 创建或扩充其他数据结构。 进程终止 有很多事件可以导致进程终止,比如: 进程完成 进程超时。进程运行时间超过规定的时限 无可用内存 I/O 失败 算术错误 无效指令 父进程终止 父进程请求 。。。 五状态模型 系统中还存在着一些处于非运行状态但已经就绪等待执行的进程,而且还存在另一些处于阻塞状态等待 I/O 操作结束的进程。 ...

2018-03-20 · 1 min · 173 words

操作系统发展和进程简介

这是操作系统进程系列文章第一篇-操作系统发展和进程简介 操作系统的发展 串行处理 对于早期计算机(20世纪40年代后期到20世纪50年代中期),因为没有操作系统,程序员都是直接与计算机硬件打交道。这些机器都在一个控制台上运行,控制台包括显示灯、触发器、某种类型的输入设备和打印机。用机器代码编写的程序通过输入设备载入计算机。如果程序因错误停止,错误原因由指示灯只是。如果程序运行结束,结果将出现在打印机中。 早期系统主要有两个问题: 调度: 大多数设备使用一个硬拷贝的登记表预定时间。如果用户预定了一个小时,半小时就运行结束,计算机将闲置30分钟,而如果没有在一个小时内运行结束,程序也会被强制停止。 准备时间:一个程序称为一个作业,运行一个程序可能需要往内存中加载编译器和程序语言,保存编译程序,加载目标程序和公用函数变链接在一起。每一步都可能需要安装拆卸硬件,如果这些步骤出现错误,只能重新开始,会占用太多时间。 这种模式称为串行处理,用户必须顺序访问计算机。 简单批处理系统 早期计算机非常贵,调度和准备又非常浪费时间和资源,为了最大限度的利用处理器,当时的研究人员开发了批处理操作系统。 第一个批处理操作系统(也是第一个操作系统)是20世纪50年代中期由 General Motors 开发的,用在 IBM 701上。 简单批处理方案的中心思想是使用一个称作监控程序的软件。通过使用这类操作系统,用户不再直接访问机器,相反,用户把卡片或磁带中的作业提交给计算机管理员,由他把这些作业按顺序组织成一批,并将整个批作业放在输入设备上,供监控程序使用。每个程序完成批处理后返回到监控程序,同事监控程序自动加载下一个程序。 我们可以从两个角度分析这个方案是如何工作的: 监控程序角度: 监控程序为了能一直控制事件的顺序,需要总是处于内存中并且可以执行。监控程序每次从输入设备中读取一个作业,读入后,当前作业被放置在用户程序区域,并把控制权交给这个作业。作业完成后,控制权交还给监控程序,监控程序再读入下一个作业。 处理器角度: 从这个角度看,处理器执行内存中存储的监控程序的指令,这些指令读入下一个作业并存储到内存中的另一个部分。一旦已经读入一个作业,处理器将会遇到监控程序的分支指令,分支指令指导处理器在用户程序开始处继续执行。处理器继而执行用户程序直到执行结束或者遇到错误。无论哪种情况,处理器都将从监控程序读入下一个指令。 控制权交给作业仅仅意味着处理器当前取和执行的都是用户程序中的指令,而控制权交给监控程序的意思是处理器当前从监控程序中取指令并且执行指令。 监控程序或者批处理操作系统,只是一个简单的计算机程序。它依赖于处理器可以从内存的不同部分取指令的能力,以交替的获取或释放控制权。此外,还要考虑其他硬件功能: 内存保护:当用户程序在运行时,不能改变包含监控程序的内存区域 定时器:用户防止一个作业独占系统。作业开始时,设置定时器,时间到,用户程序将被停止 特权指定:某些指令设计成特权指令,只能由监控程序执行。 中断:早期的计算机模型没有中断能力。这个特征使得操作系统在让用户程序放弃控制权或从用户程序获得控制权时具有更大的灵活性。 多道程序设计批处理(多任务处理)系统 虽然简单的批处理系统可以提供自动作业序列,但由于 I/O 设备处理速度相对于处理器速度太慢,处理器仍然经常空闲。这个时候多道程序设计/多任务处理方案就被提了出来。 它的工作原理是:基于内存空间可以保存操作系统和一个用户程序,假设内存空间容得下操作系统和两个用户程序,那么当一个作业需要等待 I/O 时,处理器可以切换到另一个可能并不在等待 I/O 的作业。进一步还可以扩展存储器以保存三个、四个或更多的程序,并在它们之间进行切换。 多道程序操作系统比单个程序或单道程序系统相对要复杂一些。对准备运行的多个作业,它们必须保存在内存中,这就需要内存管理。此外,如果多个作业都准备运行,处理器还必须决定运行哪一个,这需要某种调度算法。 多道程序设计是为了让处理器和 I/O 设备同时保持忙状态,以实现最大效率。其关键机制是:在响应表示 I/O 事务结束的信号时,操作系统对内存中驻留的不同程序进行处理器切换。 分时系统 通过使用多道程序设计,可以使批处理更加有效,但是对许多作业来说,需要提供一个交互模式,以使用户可以和计算机交互。 因为当时的计算机特别昂贵且巨大,普通用户也买不起,分时操作系统应运而生。 和多道程序设计允许处理器同时处理多个批作业一样,它还可以用于处理多个交互作业。 多个用户分享处理器的时间,因而该技术成为分时。 分时系统中,多个用户可以通过终端同时访问系统,由操作系统控制每个用户程序以很短的时间为单位交替执行。 如果有 n 个用户同时请求服务,若不计算操作系统的开销,每个用户平均只能得到1/n 计算机的有效速度,但由于人的反应时间相对计算机比较慢,所以一个设计良好的操作系统,其响应时间可以接近于计算机的时间。 批处理多道程序设计和分时的比较 项目 批处理多道程序设计 分时 主要目标 充分使用处理器 减小响应时间 操作系统指令源 作业提供的作业控制语言命令 从终端键入的命令 第一个分时操作系统是由麻省理工学院开发的兼容分时系统(CTSS)。系统运行在一台内存为32000个36位字的机器上,常驻程序占用了5000个。当控制权被分配给一个交互用户时,改用户的程序和数据被载入到内存剩余的27000个字的空间中。程序通常在第5000个字单元处开始被载入,系统时钟以大约没0.2秒一个的速度产生中断,在每个中断处,操作系统恢复控制权,并将处理器分配给下一个用户。因此,在固定的时间间隔内,当前用户被剥夺,另一个用户被载入。这项技术称为时间片技术。 操作系统是最复杂的软件之一,操作系统开发中有5个重要的理论进展:进程、内存管理、信息保护和安全、调度和资源管理、系统结构。 进程 进程的概念是操作系统结构的基础,这个属于最早在20世纪60年代被提出。 关于进程有很多定义: ...

2018-03-07 · 1 min · 123 words

使用腾讯云配置小程序Python开发环境

最近做小程序服务器的配置,这一篇是服务器配置的记录,方便以后安装配置。 购买服务器 之所以选腾讯云的原因很简单,那就是便宜,选用成都区,最低配置每月只需29¥。 在 腾讯云 官网注册登录就可以直接购买服务器了。 服务器系统我选择的是 ubuntu。 服务器配置 启动服务后使用新用户(此步骤不是必须)。 新建用户 首先确认使用的是 root 用户登录如果不是使用以下命令切换 sudo su 使用 adduser 命令创建用户 adduser username # username替换为你自己的用户名 接下来的步骤会让你输入密码和个人信息,自己设置就好。 使用usermod 命令将新建的用户添加到 sudo 组。 usermod -aG sudo username 关闭ssh密码登录使用密钥登录 安装openssh 因为是新系统,先执行一下 apt-get update sudo apt-get update sudo apt-get install openssh-server 启动ssh服务 可以通过sudo su命令来临时切换到root权限(不是所有的账号都可以切换到root权限,只有在/etc/sudoers文件中符合规则的用户能切换root身份) sudo su /etc/init.d/ssh start 使用密钥登录 服务器端生成密钥对: cd /home/gs # 打开新建的用户目录 mkdir .ssh cd .ssh ssh-keygen -b 2048 -t rsa ssh-keygen的基本用法: -b后面是指定加密后的字符串长度 -t后面是指定加密算法,常用的加密算法有rsa,dsa等 默认生成的文件如下: id_rsa.pub # 公钥文件 id_rsa # 私钥文件 新建 authorized_keys 文件 将本地机器的 id_rsa.pub 文件内容复制到 authorized_keys 文件 ...

2017-10-21 · 3 min · 471 words

理解JWT(JSON Web Token)认证及实践

最近想做个小程序,需要用到授权认证流程。以前项目都是用的 OAuth2 认证,但是Sanic 使用OAuth2 不太方便,就想试一下 JWT 的认证方式。 这一篇主要内容是 JWT 的认证原理,以及python 使用 jwt 认识的实践。 几种常用的认证机制 HUGOMORE42 HTTP Basic Auth HTTP Basic Auth 在HTTP中,基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式,通常用户名和明码会通过HTTP头传递。 在发送之前是以用户名追加一个冒号然后串接上口令,并将得出的结果字符串再用Base64算法编码。例如,提供的用户名是Aladdin、口令是open sesame,则拼接后的结果就是Aladdin:open sesame,然后再将其用Base64编码,得到QWxhZGRpbjpvcGVuIHNlc2FtZQ==。最终将Base64编码的字符串发送出去,由接收者解码得到一个由冒号分隔的用户名和口令的字符串。 优点 基本认证的一个优点是基本上所有流行的网页浏览器都支持基本认证。 缺点 由于用户名和密码都是Base64编码的,而Base64编码是可逆的,所以用户名和密码可以认为是明文。所以只有在客户端和服务器主机之间的连接是安全可信的前提下才可以使用。 接下来我们看一个更加安全也适用范围更大的认证方式 OAuth。 OAuth OAuth 是一个关于授权(authorization)的开放网络标准。允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。现在的版本是2.0版。 严格来说,OAuth2不是一个标准协议,而是一个安全的授权框架。它详细描述了系统中不同角色、用户、服务前端应用(比如API),以及客户端(比如网站或移动App)之间怎么实现相互认证。 名词定义 Third-party application: 第三方应用程序,又称"客户端"(client) HTTP service:HTTP服务提供商 Resource Owner:资源所有者,通常称"用户"(user)。 User Agent:用户代理,比如浏览器。 Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。 Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。 OAuth 2.0 运行流程如图: (A)用户打开客户端以后,客户端要求用户给予授权。 (B)用户同意给予客户端授权。 (C)客户端使用上一步获得的授权,向认证服务器申请令牌。 (D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。 (E)客户端使用令牌,向资源服务器申请获取资源。 (F)资源服务器确认令牌无误,同意向客户端开放资源。 优点 快速开发 实施代码量小 维护工作减少 如果设计的API要被不同的App使用,并且每个App使用的方式也不一样,使用OAuth2是个不错的选择。 缺点: OAuth2是一个安全框架,描述了在各种不同场景下,多个应用之间的授权问题。有海量的资料需要学习,要完全理解需要花费大量时间。 OAuth2不是一个严格的标准协议,因此在实施过程中更容易出错。 了解了以上两种方式后,现在终于到了本篇的重点,JWT 认证。 ...

2017-07-23 · 2 min · 398 words