文章目录
- 一、绪论
- 二、Linux操作系统
- 进程
- 线程(进程内的基本调度单位)
- 文件与设备
- 文件权限
- 文件系统
- 文件连接(共享)
- 地址空间
- 缺页中断
- 用户
- 超级用户root(用户标识与组标识都是0)
- 重定向
- 系统启动
- 常用命令
- OS研究的最新进展
- 微内核
- Mach操作系统
- Plan-9操作系统
- 微内核缺点
- 第二代微内核
- L4微内核
- Exokernel
- Spin 操作系统
- Scout操作系统
- 面向互联网的OS
- WebOS
- 2K operating system
- Globe
- TinyOS
- nesC编程
一、绪论
分时操作系统(每间隔一个时间片,处理来源不同的任务)
Unix:简洁便携,适合个人计算机使用。
Mninx:微内核,短小精悍,面向教学的操作系统。(微内核系统性能差,主流OS已不再采用,嵌入式环境偏多。)
linux:大内核,性能较好。
GNU:拥有gcc
二、Linux操作系统
OS:在核心态/管态/内核态下运行的软件,是计算机系统的资源管理器。
分为核内(核心态,可以执行特权指令与普通指令)与核外(用户态,只能执行普通指令)
把有安全隐患的指令定义为特权指令
把有安全隐患的操作由OS执行
OS需要执行安全检查来保证系统安全性
应用程序要经过系统调用才可调用OS
判断是否是特权指令:执行该指令的应用程序是否会影响到其他程序运行。
接口:程序员接口&用户级接口
功能:处理机管理&存储器管理&设备管理&文件系统&网络管理
进程
进程与程序的区别:
进程就是程序的一次执行过程,程序就是外部存储设备上的可执行文件。
进程是动态的,暂时的,程序是静态的,永久性的。
进程和程序之间不存在一一对应关系。
线程(进程内的基本调度单位)
线程就是执行流,拥有自己的状态和运行现场的少量数据。
但是没有单独的代码和数据,而是和其它线程共享。
文件与设备
在linux中,各种资源被抽象为文件!设备也是文件!
正规文件(-)(在块设备上构造的文件)
目录文件(d)(用于存储和访问文件名)
字符设备文件©
块设备文件(b)
管道(p)(进程之间的通信机制,把进程输出作为另一进程的输入。如编译器)
Socket接口(s)
对于设备,每个设备对应一个设备驱动程序。设备请求由文件系统转交给设备驱动程序。
文件权限
每个文件的i-结点中存在9位权限位,分别对应文件拥有者、同组用户、组外用户的可读、可写、可执行权限。
文件系统
Linux没有盘符!(诸如C盘,D盘,E盘),C:abc仅仅代表当前目录下名为"C:abc"的文件!
"./“表示当前目录,”../"表示父目录。
文件连接(共享)
硬连接 (in file1 file2):被连接文件有一个连接计数,取消连接时,计数减1,文件连接数为0时删除文件。
符号连接(类似快捷方式) (in -s file1 file2):仅存放被连接文件的路径名。
地址空间
程序在虚拟地址空间中运行,只有当虚拟地址映射到物理地址空间时,程序才能够访问数据。
缺页中断
当应用程序访问无效区域时,处理机产生一个异常(缺页中断)。缺页中断处理程序触发操作系统实现虚拟存储和内外存对换。
进程地址空间
核心地址空间
总线地址空间
外设地址空间
DMA地址空间
低端地址空间和高端地址空间问题
用户
所有进程/文件都属于某个用户与某个用户组。当进程访问文件时,会根据二者的用户与用户组进行权限检查。
超级用户root(用户标识与组标识都是0)
超级用户拥有全部的权限,可以通过su命令切换到root,有些命令只有root用户才可以执行(比如shutdown)。
重定向
输入重定向:进程可以不从键盘上输入命令,而是从文件中输入命令。
输出重定向:进程可以把程序的结果输出到文件中,而不是屏幕上显示。
系统启动
(1)开机加电
(2)BIOS启动,系统自检,读入引导区
(3)执行引导区代码,装入OS内核
(4)初始化OS
(5)创建第一个进程并初始化
(6)进程转换进程图象并执行第一个软件(init)
(7)init执行RC脚本初始化各个终端
(8)终端上出现login提示用户登录
(9)登录成功后执行shell处理程序
(10)shell等待用户输入命令并执行
常用命令
login时输入的密码不显示!
用分号";"隔开多条指令!
管道命令:用"|"隔开,前一条命令的输出会成为后一条命令的输入。
输入重定向:命令<filename
输出重定向:命令>filename
显示当前目录:pwd
显示/设置时间日期:date
显示当前用户与用户组:whoami
输出信息:echo
查询某个命令的用法:man <命令名>
退出系统:logout
重启系统:reboot
关机:shutdown
改变当前目录:cd <目录名>
设置/修改密码:passwd
变成超级用户:su
显示文件列表:ls
显示文件内容:cat
文件复制:cp file1 file2(把file1的内容复制到file2中)
文件重命名:mv
删除文件:rm
查找文件:find
创建目录:mkdir
删除目录:rmdir
改变文件存取权限:chmod
改变文件所在用户:chown username filename
改变文件所在用户组:chgrp groupname filename
字符串匹配:grep
排序:sort
去重:uniq
比较文件共有/不共有的行:comm -12 file1 file2/comm -23 file1 file2
比较文件不同的行:diff file1 file2
合并两个文件:paste
将输出复制到文件中:tee
检查进程状态:ps
杀死进程:kill -9 pid
启动文本编辑器:vi filename(按wq保存退出,按q!不保存退出)
OS研究的最新进展
微内核
Unix中扩充程序只能存在于核内,但只能在内核扩充会显得臃肿,可靠性不足。
微内核:仅仅保留最基本的功能(作业、线程、进程通信(IPC)、内存管理原语等),把大部分功能放在核外,实现核外扩充。
- 由于文件系统和硬件无关(和硬件相关的是存储设备,而不是文件系统),因此放在核外。
- 进程管理、存储管理、设备管理不同的操作系统有不同的划分(部分在核内,部分在核外)。
- 操作系统体系结构基于客户/服务器模型(C/S)和消息传递。
- 通过操作系统的仿真器实现对其它操作系统的兼容。
Mach操作系统
内核提供线程、进程间通信。
Plan-9操作系统
每个进程都有自己的可变名称空间。
进程可重排列、添加和删除自己的命名空间,而不影响其他进程。
客户-服务器环境下的分布式计算概念。
由于Plan 9的系统模型与其他现代操作系统差异很大,有时很难将外部软件移植到Plan 9。
Plan 9专注于文件,命名是其表现力的核心。它将本地名称空间和全局约定相结合以互连网络资源,避免了维护全局统一名称空间的困难。
微内核缺点
由于微内核操作系统的类似RPC调用是通过消息传送机制实现的,而传统操作系统的系统调用一般是通过类似trap的方法实现。相比于trap方法,通过消息传送机制需要创建消息、发送消息、进程切换等更多的步骤。这些步骤使得微内核操作系统的消息传送部分成为一个瓶颈,其性能大大低于传统操作系统的系统调用部分。(原本是内核的部分变成了核外,通信有了额外的开销。)
需要频繁的切换用户态与核心态,且Cache命中率并不高,性能较低。
第二代微内核
解决现有缺陷的方法是:
- 扩大微内核,并把一些关键的服务程序和驱动程序重新加入到内核中去,从而减少系统在用户态和核心态之间的切换以及系统在不同地址空间之间的切换。
但是,扩大内核的方法大大削弱了微内核思想带来的优点–扩大的内核降低了系统的扩充性、灵活性和可靠性。 - 进一步减少内核的大小,并对RPC调用进行直接优化。这种思路导致了被称为第二代微内核的一些新的内核设计的出现。
L4微内核
支持一个基于消息传送的IPC原语,以便在此基础上实现高性能的RPC机制,性能很好,超过了许多操作系统。
提供了地址空间管理原语和线程管理原语。
当硬件中断发生时,微内核会产生一条消息,并把此消息发送到相关联的用户进程中,然后由用户进程中接收这条IPC消息的线程,并处理中断。(实现中断处理与内核的解耦)
Exokernel
从优化IPC的角度出发,支持一个高度优化的原语保护控制转移(protected control transfer, PCT)。PCT是一个不带参数的跨地址空间的过程调用,其功能类似于一个硬件中断。在PCT的基础上,可以实现高级的IPC抽象如RPC。
专注于安全地复用原始硬件:从基本硬件原语开始,应用程序级库和服务器可以直接实现传统的操作系统抽象,专门用于适当性和速度。
Spin 操作系统
SPIN是围绕一组核心服务设计的,包括线程、虚拟内存原语、设备驱动程序和扩展机制。这些模块是机器启动所需的系统其余部分的基础,是一个面向通信的操作系统,针对网络设备(如网络连接设备、机顶盒、手持设备等)。
Scout操作系统
Scout是一个面向通信的操作系统,针对网络设备(如网络连接设备、机顶盒、手持设备等),采用抽象路径。
面向互联网的OS
WebOS
webos的目标是为广域应用程序提供一组通用的操作系统服务,包括资源发现、全局命名空间、远程进程执行、资源管理、身份验证和安全机制等。
- WebFS:一个全局文件系统层,允许未经修改的应用程序读写URL名称空间。通过AFS协议,需要缓存一致性的应用程序可以获得缓存一致性。
- 活动名称:一种将服务功能(如负载平衡、资源发现和故障透明度)从服务器逻辑移动到网络中的机制。
- 安全远程执行:我们相信应用程序将代表任意用户在远程节点上运行。必须提供保证,确保应用程序不会破坏远程服务器的完整性,并且服务器不能利用提供给程序的任何用户访问权限。
- 安全和身份验证:访问远程文件的应用程序必须先验证其身份,然后才能授予对受保护文件的访问权限。
- 事务:应用程序必须具有明确定义的故障模式。例如,中止的远程代理不应使用户的本地文件系统处于不一致的状态。
2K operating system
构建2K的主要目标是为管理动态性提供一个范式。它将展示一个基于以下设计思想的实验性网络中心自适应系统架构:
一种类似CORBA的通信底层,包括一个反射对象请求代理,用于构建系统服务,促进系统自适应,并提供一定程度的间接性,以灵活绑定命名方案、资源管理器和服务;
一个架构感知系统和用户组件的框架,为系统组件提供有关其环境的信息,并允许他们评估和利用系统的物理和逻辑架构;
QoS感知资源管理,允许为应用程序规范和提供服务。该系统将能够自我适应,优化其在不同环境下的性能和可靠性;
一种动态安全系统,支持在分布式系统中更改安全策略,并适应快速的系统更改。系统必须支持移动计算的委托和变更的撤销;以及
移动代理支持自动软件更新、远程管理、涉及推拉转换的优化和自动重新配置。
Globe
TinyOS
一种基于组件(Component-Based)的架构方式,使得能够快速实现各种应用。
采用模块化设计,所以程序核心往往都很小,这能够让TinyOS很有效的运行在无线传感器网络上并去执行相应的管理工作等。
TinyOS本身提供了一系列的组件,可以很简单方便的编制程序,用来获取和处理传感器的数据并通过无线电来传输信息。可以把TinyOS看成是一个可以与传感器进行交互的API接口,它们之间可以进行各种通讯。
TinyOS在构建无线传感器网络时,它会有一个基地控制台,主要是用来控制各个传感器子节点,并聚集和处理它们所采集到的信息。TinyOS只要在控制台发出管理信息,然后由各个节点通过无线网络互相传递,最后达到协同一致的目的,比较方便。
TinyOS提供一系列可复用的组件,一个应用程序可以通过连接配置文件将各种组件连接起来,完成需要的功能。
TinyOS的应用程序都是基于事件驱动模式的,采用事件触发去唤醒传感器工作,一般由硬件中断处理来驱动事件。
每一个task都很短小,能够使系统的负担较轻。
events一般用在对于时间的要求很严格的应用中,可以优先于tasks和其他events。
在TinyOS中由于tasks之间不能互相占先执行,所以TinyOS没有提供任何阻塞操作。
Ad-hoc:一种不需要网桥(AP)的无线对等传输模式,任两个sensor若在彼此的通讯覆盖范围内,则这两个sensor可直接互相通讯,共享资源。它具有对称性,即B若在A的通讯范围内,则A也在B的通讯范围内;但往往由于某些外部条件的限制,可能会造成这种对称的不协调。
Multi-hoc:若在两个相距较远的sensor之间通讯,可以寻找一个中间的sensor作为转发的节点,则可以采用接力的方式来完成通讯过程。利用它可以增加无线网络的通讯范围,但随着传输次数增加,数据的正确率降低,传输过程的可靠性也降低。
nesC编程
TinyOS用nesC编程,是一种类似C的语言,它是对C的扩展,也是结构化的语言。它是基于组件式的编程,模块化的设计。
nesC组件有两种:
Module(模块):提供接口,需要对提供接口里的command与使用接口的event进行实现。
Configuration(连接配置文件):把各个组件和模块组合在一起。
nesC接口(interface):分为无参数&有参数两种。
TinyOS模拟器:同时模拟多个sensor nodes运行同一个程序。