操作系统期末复习之操作系统引论
操作系统定义
操作系统是一组控制和管理计算机软硬件资源、合理地对各类作业进行调度以及方便用户使用的程序集合。
操作系统是 位于硬件层(HAL)之上,所有其它系统软件层之下的一个系统软件,使得管理系统中的各种软件和硬件资源得以充分利用,方便用户使用计算机系统。
OS的目标
方便性: 操作系统使计算机更易于使用。
有效性: 操作系统允许以更有效的方式使用计算机系统资源。 提高系统资源利用率 、提高系统的吞吐量。
可扩展性: 在操作系统中,允许有效地开发,测试和引进新的系统功能。
开放性: 实现应用程序的可移植性和互操作性,要求具有统一 的开放的环境。
其中有效性,可扩展性最重要。
OS的作用
1.作为用户与计算机硬件系统之间的接口
2.作为计算机系统资源的管理者(软硬件资源)
3.作为扩充机器
OS的特征
1、并发性(最重要的特征) 2、共享性 3、虚拟性 4、异步性
并发是最重要的特征,其它特征都以并发为前提。其中最基本特征是并发和共享。
OS的主要功能
1、处理机管理(CPU)
2、存储器管理
3、设备管理
4、文件管理
5、方便用户使用的用户接口。
OS的 ...
操作系统期末复习之文件系统
文件系统 文件系统是操作系统用于明确存储设备(常见的是磁盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。
文件系统概述文件系统的功能:
有效地管理文件的存储空间;管理文件目录;完成文件的读/写操作;实现文件共享与保护;为用户提供交互式命令接口和程序调用接口。
文件系统定义:操作系统中的各类文件、管理文件的软件,以及管理文件所涉及到的数据结构等信息的集合。
现代OS几乎都是通过文件系统来组织和管理在计算机中所存储的大量程序和数据的。文件系统的管理功能是通过把它所管理的程序和数据组织成一系列文件的方法来实现的。而文件则是指具有文件名的若干相关元素的集合。元素通常是记录,而记录是一组有意义的数据项的集合。可以把数据组成分为数据项、记录、文件。
① 数据项,数据项是最低级数据组织形式。分为基本数据项(用于描述一个对象某种属性的字符集,是数据组织中可以命名的最小逻辑数据单位,即原子数据,又称为数据元素或字段)和组合数据项(由若干个基本数据项组成,简称组项)
② 记录,是一组相关 ...
操作系统期末复习之输入输出系统
输入输出系统 输入输出系统是计算机系统中的主机与外部进行通信的系统。在计算机系统中,通常把处理机和主存储器之外的部分称为输入输出系统,输入输出系统的特点是异步性、实时性和设备无关性。
I/O系统简介 设备管理的对象:主要是I/O设备。 设备管理的基本任务:完成用户提出的I/O请求,提高I/O速率以及改善I/O设备的利用率。 设备管理的主要功能有:缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等。
I/O设备类型繁多,按设备的共享属性分类,可以分为三类,独占设备,在一段时间内只允许一个用户(进程)访问的设备,即临界资源。共享设备,在一段时间内允许多个进程同时访问的设备,当然,每一时刻仍然只允许一个进程访问,如磁盘(可寻址和可随机访问)。虚拟设备,通过虚拟技术将一台设备变换为若干台逻辑设备,供若干个用户(进程)同时使用。
I/O 系统的基本功能
设备分配
设备映射
设备驱动
I/O缓冲区的管理
通用设备管理分层模型
通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此 ...
操作系统期末复习之存储器管理
存储器管理操作系统的职能之一,主要任务是为多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及能从逻辑上扩充内存。主要目的和功能:
1、主存储器的分配和管理
2、提高主存储器的利用率
3、“扩充”主存容量
4、存储保护
存储器的层次结构主存储器
用于保存进程运行时的程序和数据。CPU的 控制部件只能从主存中取得指令和数据到CPU寄 存器,同样,CPU寄存器中的数据可存入主存。 CPU与外设交换数据必须依托于主存。
寄存器
寄存器访问速度最快,能与CPU协调工作,价格昂贵,容量不大,寄存器用于加速存储器的访问速度,如用寄存器存放操作数,或用作地址寄存器加快地址转换速度等。
高速缓存
CPU对高速缓存的访问,其速度比访问主存快,比访问寄存器慢。 根据程序执行的局部性原理,将主存中一些经常访问的数据存放在高速缓存中,减少访问主存的次数,提高程序的执行速度。 有些计算机系统设置了两级高速缓存,即,一级高速缓存与二级高速缓存。cpu访问一级高速缓存最快。(i9 12900K,三级缓存:30MB)
磁盘缓存
内存中一块存储区,对应于某固定磁盘,临时存储磁盘数据(如,数 ...
Goroutine并发模型
Go语言的协程——Goroutine进程(Process),线程(Thread),协程(Coroutine,也叫轻量级线程)
进程进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序”,它是CPU资源分配和调度的独立单位。进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。 进程的局限是创建、撤销和切换的开销比较大。
线程线程是在进程之后发展出来的概念。 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。一个进程可以包含多个线程。线程的优点是减小了程序并发执行时的开销,提高了操作系统的并发性能,缺点是线程没有自己的系统资源,只拥有在运行时必不可少的资源,但同一进程的各线程可以共享进程所拥有的系统资源,如果把进程比作一个车间,那么线程就好比是车间里面的工人。不过对于某些 ...
ioutil包与并发编程初识
ioutil包除了io包可以读写数据,Go语言中还提供了一个辅助的工具包就是ioutil,里面的方法虽然不多,但是都还蛮好用的。
1import "io/ioutil"
该包的介绍只有一句话:Package ioutil implements some I/O utility functions。
ioutil包的方法下面我们来看一下里面的方法:
12345678910111213141516171819202122232425262728293031323334// Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情// 并且始终成功返回。var Discard io.Writer = devNull(0)// ReadAll 读取 r 中的所有数据,返回读取的数据和遇到的错误。// 如果读取成功,则 err 返回 nil,而不是 EOF,因为 ReadAll 定义为读取// 所有数据,所以不会把 EOF 当做错误处理。func ReadAll(r io.Reader) ([]byte, error)// Rea ...
断点续传与bufio包
断点续传Seeker接口Seeker是包装基本Seek方法的接口。
123type Seeker interface { Seek(offset int64, whence int) (int64, error)}
seek(offset,whence),设置指针光标的位置,随机读写文件:
第一个参数:偏移量 第二个参数:如何设置
0:seekStart表示相对于文件开始, 1:seekCurrent表示相对于当前偏移量, 2:seek end表示相对于结束。
1.txt内容
1ABCDEFababHelloWorldHelloWorld
示例代码:
12345678910111213141516171819202122232425262728293031323334353637package mainimport ( "fmt" "io" "log" "os")func main() { fileName := &q ...
文件详细操作
File文件操作首先,file类是在os包中的,封装了底层的文件描述符和相关信息,同时封装了Read和Write的实现
FileInfo接口FileInfo接口中定义了File信息相关的方法。
12345678type FileInfo interface { Name() string // base name of the file 文件名.扩展名 1.txt Size() int64 // 文件大小,字节数 12540 Mode() FileMode // 文件权限 -rw-rw-rw- ModTime() time.Time // 修改时间 2018-04-13 16:30:53 +0800 CST IsDir() bool // 是否文件夹 Sys() interface{} // 基础数据源接口(can return nil)}
示例代码:
1234567891011121314151617181920212223242526package mainimport ( "f ...
包的使用和time包
包的使用Go语言使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。
Go 语言的源码复用建立在包(package)基础之上。包通过 package, import, GOPATH 操作完成。
main包Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,需要import导入!
packagesrc 目录是以代码包的形式组织并保存 Go 源码文件的。每个代码包都和 src 目录下的文件夹一一对应。每个子目录都是一个代码包。
代码包包名和文件目录名,不要求一致。比如文件目录叫 hello,但是代码包包名可以声明为 “main”,但是同一个目录下的源码文件第一行声明的所属包,必须一致!
同一个目录下的所有.go文件的第一行添加 包定义,以标记该文件归属的包,演示语法:
1package 包名
包需要满足:
一个目录下的同级文件归属一个包。也就是说,在同一个包下面的所有文件的pa ...
type关键字与错误处理
type关键字type:用于类型定义和类型别名
类型定义:type 类型名 Type
类型别名:type 类型名 = Type
示例代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556package mainimport ( "fmt" "strconv")func main() { var i1 myint var i2 = 100 //int i1 = 200 fmt.Println(i1, i2) var name mystr name = "王二狗" var s1 string s1 = "李小花" fmt.Println(name, s1) //i1 = i2 //cannot use i2 (type int) as type myint in assignment //name = s1 //cannot u ...