Rust学习(三)
泛型
提高代码复用能力
泛型是具体类型或其他属性的抽象代替
编写的代码不是最终的代码、而是一种模板,里面有一些“占位符”
编译器在编译时将“占位符”替换为具体的类型。
函数泛型例如:fn largest<T>(list:&[T]) -> T{ ... }
结构体泛型12345678910111213141516struct User<T>{ x: T, y: T,}struct Users<T, U>{ x: T, y: U,}fn main() { let integer = User {x: 5, y: 10}; let double = User {x: 1.0, y: 2.0}; let mix = User {x: 5, y: 10.0};}
枚举泛型123456789enum Option<T> { Some(T) ...
Rust学习(二)
Rust 语法学习一般 Struct定义
和 C 语言一样,是一种自定义的数据类型
和 C 语言一样,为相关联的值命名,打包成有意义的组合
建立
使用 struct 关键字,并为整个 struct 命名。
在花括号内,为所有字段(Filed)定义名称和类型
123456struct User { username:String, email:String, sign_in_count:u64, active:bool,}
实例化
想要使用 struct, 需要创建 struct 的实例;
为每个字段指定具体值
无需按声明的顺序指定
123456let user1 = User { email: String::from("acb@123.com"), username: String::from("Nikky"), active: true, sign_in_count: 556,};
访问与赋值
使用点标记法
123456789let mut ...
Rust学习(一)
环境配置安装RustRust官网:官网安装好后可以运行命令cargo --version检测,出现版本号则安装完毕
VsCode配置习惯了使用专用编辑器的我对此感到十分痛苦。
我一共安装了三个:
rust-analyzer:它会实时编译和分析你的 Rust 代码,提示代码中的错误,并对类型进行标注。
rust syntax:语法高亮
CodeLLDB:进行调试。
第一次调试时可能会出现报错,提示无法连接什么的,这时候需要挂一个梯子去官网下载vsix,然后在VsCode插件安装中选择通过vsix安装插件即可。
通过cargo新建项目cargo new 项目名称例如,在一个空文件夹下执行该命令:cargo new HelloWorld,文件结构如下:/src/main.rs为源代码/Cargo.lock为编译后生成的,负责追踪项目依赖的精确版本/Cargo.tomlCargo的配置格式,其中:
pacakge 配置包的项目名,项目版本,项目作者,Rust版本
dependencies 列出项目的依赖项在rust里面,代码的包称作crate.
cargo命令cargo bul ...
操作系统文件系统复习
磁盘有效化一个磁盘要想真正变得有用,一般要按顺序经历以下的过程
物理格式化(低级格式化):一般在磁盘出厂时进行,主要是给磁道划分扇区,排查错误扇区。
分区:由软件进行,比如FDISK
逻辑格式化(高级格式化):建立文件系统
安装操作系统。
文件定义是指一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项的序列。信息项:构成文件内容的基本单位(单个字节,或多个字节),各信息项之间具有顺序关系。也就是说,文件内容是由信息项组成的。
组成文件体、文件说明
文件体文件内容
文件说明文件存储和管理的相关信息,比如文件名、文件内部标识、文件存储地址、访问权限、访问时间。
文件系统数据结构文件控制块(FCB)定义保存管理文件所需的所有有关信息(文件属性或元数据)
内容
基本信息:文件名、物理位置、文件逻辑结构、文件物理结构
访问控制信息:文件所有者、访问权限
使用信息:创建时间、上一次修改时间、当前使用信息。
文件逻辑结构我们用户看到的文件表面上的行文结构,举一个这样的例子:程序员在写代码时其实考虑的都是文件的逻辑结构,比如顺序文件,索引文件(什么一级索引,多级索引,B树索引,Hash ...
操作系统磁盘复习
主引导扇区定义硬盘的0柱面、0磁头、1扇区称为主引导扇区。主引导扇区是在硬盘分区时由分区软件写入的(FDISK),因而不属于任何操作系统,所以分区时不进行操作系统引导扇区的写入。
组成前446字节为启动代码(BootLoader)后面64字节是分区表(DPT),一共可以记录4个分区。最后有2个字节是幻数,标识这是一个被分区的硬盘硬盘分区有三种,主磁盘分区、扩展磁盘分区、逻辑分区。主分区只能有一个是激活(活动)的,其余是未激活。分出主分区后,其余的部分可以分成扩展分区,一般是剩下的部分全部分成扩展分区,也可以不全分,剩下的部分就浪费了。扩展分区不能直接使用,必须分成若干逻辑分区。所有的逻辑分区都是扩展分区的一部分。
DPT表项
磁盘分类固定头磁盘磁头相对于盘片径向方向固定的,称为固定头磁盘,每个磁道一个磁头。
活动头磁盘磁头可移动的、可以来回伸缩定位磁道的,称为活动头磁盘
固定盘磁盘磁盘永久固定在磁盘驱动器内,称为固定盘磁盘。
可换盘磁盘磁盘可移动和替换的,称为可换盘磁盘。
磁盘地址与块号的转换先记忆一个知识,一个逻辑块号的大小为一个扇区的大小。一般情况下、先填满扇区、再填满磁道、再 ...
操作系统外设管理复习
外设管理目的
提高效率:通过缓存等机制,匹配CPU的速度
方便用户:统一了繁多的外设,提供了统一的访问方法
方便控制:方便OS对外设的控制
功能
提供接口
设备的分配、释放
设备的访问、控制
I/O缓存和调度设备的分配和释放是逻辑I/O,实际上与设备无关设备的访问和控制通过设备驱动程序完成,是真正的I/O
控制方式对外设的控制是通过外设提供的控制器进行的,包括控制寄存器、状态寄存器、以及一些数据的寄存器。通过读写这些寄存器我们就实现了对外设的控制
I/O分类数据组织
块设备:以数据块为单位存储、传输信息。传输速率高,可随机读写
字符设备:以字符为单位存储、传输信息。传输速率低,不可随机读写
用途
存储设备
传输设备
人机交互设备
资源分配
独占设备:同时只能由一个设备访问
共享设备:同时允许多个设备访问
虚设备:在一类设备上模拟另一类设备
设备控制器图示
功能
接受和识别CPU指令
数据交换:CPU与控制器、控制器与设备
设备状态的了解和报告
设备地址识别
缓冲区
对设备传来的数据进行差错检测
I/O硬件组成
控制器与CPU接口:数据寄存器、控制寄存器、状态寄存器
控制 ...
操作系统调度复习
调度类型图示
具体
高级调度:作业之间的调度,调度执行哪个作业,不执行哪个作业
中级调度:调度页面的换入换出
低级调度:调度进程概念积累周转时间作业从提交到完成(得到结果)所经历的时间放进去就开始计时,什么时候吐出来什么时候停止计时,至于它在里面是在被执行还是被阻塞,不管。
带权周转时间周转时间/执行时间平均周转时间作业周转总时间/作业数平均带权周转时间带权周转总时间/作业数响应时间发出请求到系统首次给出响应的时间。吞吐量单位时间内所完成的作业数这里注意吞吐量不是平均周转时间的倒数,这是由于并发执行的作业在时间上可以重叠。
进程占用CPU的方式不可抢占式一旦处理器分配给一个进程,它就一直占用处理器,直到该进程自己因调用原语操作或等待I/O等原因而进入阻塞状态,或时间片用完时才让出处理器,重新进行。注意描述,不可抢占并不代表它会从头执行到尾,只是说不会被其他进程抢占,自己作那没办法。
抢占式就绪队列中一旦有优先级高于当前运行进程优先级的进程存在时,便立即进行进程调度,把处理器转给优先级高的进程。
批处理系统调度算法先来先服务调度对象作业、进程
定义顾名思义,谁先来拷打谁,按照来的 ...
操作系统进程线程复习
程序顺序执行特征
顺序性:按照程序结构所指定的次序执行
封闭性:独享计算机所有资源
可再现性:初始条件相同则结果相同
程序并发执行特征
间断性:并发程序具有“执行—-暂停——执行”这种间断性的活动规律。
非封闭性:多个程序共享资源
不可再现性:在初始条件相同的情况下,程序执行结果取决于执行次序
竞争定义多个程序在读写一个共享数据时结果依赖顺序。所以如果不依赖顺序,只是读写共享数据也不能说它是竞争。
判断——Bernstein条件定义
$$R(SI)$$
SI的读子集,代表着进程SI需要读的资源
$$W(SI)$$
SI的写子集,代表着进程SI需要写的资源
条件两个进程S1和S2可并发,当且仅当下列条件同时成立:
$$\eqalign{
& R(S1) \cap W(S2) = \emptyset \cr
& W(S1) \cap R(S2) = \emptyset \cr
& W(S1) \cap W(S2) = \emptyset \cr} $$
不然就会发生竞争,运行结果将不确定。
其他定义
临界资源:一次只能允许一个进程访问的资源叫临界资源
临界 ...
操作系统内存管理方式复习
前置知识大小尾端大尾端所谓的大端模式,就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。所谓的小端模式,就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。举个例子,比如对于0x12345678
大端模式:
$$\eqalign{
& address:00 \cdot 01 \cdot 02 \cdot 03 \cr
& thValue:12 \cdot 34 \cdot 56 \cdot 78 \cr} $$
小端模式:
$$\eqalign{
& address:00 \cdot 01 \cdot 02 \cdot 03 \cr
& thValue:78 \cdot 56 \cdot 34 \cdot 12 \cr} $$
记忆方式
记忆一:地址从低到高,符合一般认知的数字排列方式是大端。
记忆二:小段高位对高地址,低位对低地址。这个真的很重要!期末必考,我说的!
作业作业是用户需要计算机完成的某项任务,是要求计算机所做工作的集合。进程进程包括程序和程序处理对象(数据集),是一个程序对某个数据集的执行过程。程序程序是静止的, ...
操作系统内存管理复习
存储器(非重要)DRAM(动态存储器)和SRAM(静态存储器)的对比
分类
RAM: Random Access Memory
SRAM
DRAM
SDRAM,DDR SDRAM
ROM: Read Only Memory
PROM,EPROM,EEPROM
Flash memory(SSD)
Nor
NAND
Disk(磁盘)
Tape(磁带)
GCC包含的几个工具
CC1 : 预处理器和编译器
as : 汇编器
collect2 : 链接器
程序装入、执行的过程一般要经历预处理、编译、链接、重定位、装入。
链接
重定位重定位分为静态重定位和动态重定位。
装入流程
ELF头魔数检验
找到段表项
根据段表项解析出各个段应当被加载到的虚地址,在文件中的偏移。
正式加载每一段,分配物理页面,并按虚地址映射。
用0填充内存和文件大小不匹配的区域
改PC为入口地址
开始执行
段我们只需要了解bss段,data段和text段。bss:用来存放程序中未初始化的全局变量的一块内存区域。bss是英文Block Started by Symbol的简称。 ...