BUAA-Python-Note
6.27解释型语言
Python 作为解释型语言,在执行过程中通过解释器逐行解释每一行源代码,执行速度要慢于编译型语言(C语言等),但编译时间更快、平台间的可移植性更好
常用内置函数input()
input([prompt]) :prompt 内容作为提示信息显示在控制台中,引导用户输入,默认读入的类型为 str 类型
通常情形下需要进行格式转换,可以使用 <type>(input()) 进行转换, type 是转换的目标格式类型
一行读入多个由空格等分隔符读入的信息可以用 spilt() 进行分割,如:
a, b = input().spilt()# 对多个同时读入的数据进行数据转换可以使用:a, b = map(int, input().spilt())# 返回的数据可以再进行包装(外部加 list)
type() 函数可以提供输入变量的类型,可以 print 查看
print()常用输出函数,当输出多个内容时使用 , 进行分隔,在控制台中会通过空格进行分隔,并输出在同一行内,输出结束后默认换行
格式化输出方法:
使用 % 符作为占位符:
字符串内类似C ...
BUAA-OO-UNIT4-Summary
面向对象设计与构造第四单元总结
总结本单元所实践的正向建模与开发
总结本单元作业的架构设计,并对比分析最终的代码设计和UML模型设计之间的追踪关系
总结自己在四个单元中架构设计思维的演进
总结自己在四个单元中测试思维的演进
总结自己的课程收获
作业要求
本单元第一次作业以一个图书馆模拟系统为例,锻炼同学们对程序架构的设计能力,以及加强对 UML 类图的绘制训练。
本单元第二次作业以多学校的联网图书馆模拟系统为例,锻炼同学们对程序架构的抽象能力,以及加强对 UML 状态图的绘制训练。
本单元第三次作业以前两次作业为基础,锻炼同学们对 UML 顺序图的绘制训练。
总的来说,我们在第一次作业实现了一个图书馆的基础功能(借阅、预定、书目数量限制、还书、损毁&修复、丢失等),功能难点主要围绕借阅无书时的预定环节。在第二次作业中,我们将单个图书馆的功能封装,并提升为多个,并加入了校际借阅流程与无书购买流程,难点主要在闭馆后对不能立刻处理的借书请求的分类处理&处理顺序,整理日的动作顺序&购书操作,学生获取到一本书籍后对预约/校际借阅/预购队列产生的影响。在第三次作业中,增 ...
从负开始的 Vue 学习 (1)
系列文章
从负开始的 Vue 学习 (1)
从负开始的 Vue 学习 (2)
引入 Vue
Vue 为我们提供了四种引入的方法,各有优劣。
截至23年6月,官网已经把 CLI 和 Vite 方法替换为了 create-vue ,也就是只有下面的第1和4项可选
CDN、引入.js文件借助 script 标签直接通过 CDN 引入全体源码的方式来使用 Vue ,具体可参考 vue3 官方文档,不建议在大型项目中使用这种方法
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
在后面的引入方法中,通常要使用 npm 命令对项目进行构建/启动,所以要先在终端上安装node.js,确保 npm 命令能够正常使用,安装可以参考网上文档,这里不再赘述。
Vite通过 Vite 工具安装 Vue
# When has npm 7+$ npm init vite@latest <projectName> -- --template vue$ ...
BUAA-OS-2023-Lab6-Challenge
Lab6 挑战性任务任务目标在 Lab6 的后半程,我们在 MOS 上实现了一个基本的外部指令 Shell,其能够通过不断创建 sh.c 的进程,并调用其他文件来处理用户指令。在 Lab6 的挑战任务中,我们要在这基础上对 Shell 进行迭代开发,使其能完成更丰富的服务要求。
实现一行多命令
用 ; 分开同一行内的两条命令,表示依次执行前后两条命令。; 左右的命令都可以为空。
在 Linux 的控制台中也支持这样的指令,例如在控制台输入如下指令会有对应的现象:
可以看到先实现了 clear 操作,后进行了 echo 操作。
我们要求,用 ; 隔开的两条指令必须有执行的先后顺序,即先执行左侧指令,后执行右侧指令。利用 gettoken 中自支持的 ; 在 parsecmd 中新添加判断分支即可实现对 ; 的识别。
由于执行两条指令,并保证指令执行的先后顺序,则需要先 fork 进程并执行左侧指令,使用 wait 等待其执行完后再继续解析右侧指令(重复 parsecmd 即可)
int parsecmd(char **argv, int *rightpipe) { // ...
BUAA-OS-2023-Lab6-Report
BUAA-OS-2023-Lab6-ReportThinking 6.1
示例代码中,父进程操作管道的写端,子进程操作管道的读端。如果现在想让父进程作为“读者”,代码应当如何修改?
原有代码的分支语句如下:
switch (fork()) { case -1: break; case 0: /* 子进程- 作为管道的读者*/ close(fildes[1]); /* 关闭不用的写端*/ read(fildes[0], buf, 100); /* 从管道中读数据*/ printf("child-process read:%s",buf); /* 打印读到的数据*/ close(fildes[0]); /* 读取结束,关闭读端*/ exit(EXIT_SUCCESS); default: /* 父进程- 作为管道的写者*/ close(fildes[0]); /* 关闭不用的读端*/ write(fildes[1], "Hello world\n", 12); /* 向管道中写数据*/ close(fildes[1]) ...
BUAA-OS-Theory-Chapter7
第七章 文件系统文件系统基本概念
为了解决计算机中数据无法长期保存、共享困难等问题,人们提出了文件的概念,把数据组织成文件的形式,用文件作为数据的存储、访问单位。
文件是一组带标识的、在逻辑上有完整意义的信息项的序列。信息项是构成文件内容的基本单位(字节/多字节)
所有的 I/O 设备、文本等资源都可以看成文件
典型的文件结构
流式文件:构成文件的基本单位是字符。文件是字符的串构成的集合。
记录式文件:文件由若干条记录组成,可以按照记录进行读写等操作
文件系统的定义:操作系统中与文件管理有关的软件、文件与需要的数据结构的总称。
文件系统模型的三个层次文件系统的接口
命令行接口:用户(Shell)和文件系统交互的接口
程序接口:用户程序与文件系统的接口,通过系统调用的形式获取文件系统的服务
对象操作管理的软件集合
对文件存储空间的管理
对文件目录的管理
文件逻辑地址 → 物理地址
文件读写管理
文件共享与保护功能
对象及其属性
文件:管理的直接对象
目录:包含文件的指针,组织管理文件
磁盘存储空间
文件系统的实现文件编排的结构
逻辑结构:文件组织,逻辑地址连续,但 ...
BUAA-OS-Theory-Chapter6
第六章 磁盘存储管理磁盘存储的工作原理基本概念
扇区:磁盘片上被分成许多的扇形区域
磁道:以磁盘片中心为圆心,半径不同的同心圆
柱面:同一半径的不同磁盘片形成的圆柱
扇区是磁盘读取的单位,磁盘内容按扇区号顺序存储。
磁盘访问时间包括寻道时间、旋转延迟时间、传输时间
$寻道时间=磁盘启动时间+n条磁道×移动单次的时间$
$旋转延迟时间=\frac{1×旋转一圈的时间}{2}$
$传输时间=\frac{传输的字节数}{单个磁道上的字节数}×旋转一圈的时间$
磁盘调度算法
先来先服务算法
形成一个磁道队列,按序访问各个磁道,从而进行数据读写
最短寻道时间算法
优先选择距离磁头当前最近的请求进行寻道,寻道优先。但会出现饥饿现象,即远处的请求长期无法满足
扫描算法 - SCAN
电梯算法,先向一个方向移动,处理沿途的请求,直至该方向无请求,掉头处理反方向请求
循环扫描算法 - CSCAN
相对扫描算法,将每次开始的磁道设为0号,当单方向访问完后,立刻强制返回0号磁道,再次循环。
RAID
廉价冗余磁盘阵列,把多块独立的磁盘按照不同方式组合为一个大型的逻辑磁盘,从而提供比单 ...
BUAA-OS-Theory-Chapter5
第五章 输入输出系统I/O 硬件基本原理设备管理目标与功能管理目标
提高效率:提高 I/O 的访问效率,匹配 CPU 与外设间的速度差异
方便使用:便于用户使用
方便控制:便于操作系统内部对设备的控制
管理功能
提供设备使用的用户接口:命令接口、编程接口
设备分配和释放:使用设备前需要分配资源
设备的访问与控制:并发访问、差错处理
I/O 缓冲与调度:提高 I/O 效率
设备控制器
组成:数据寄存器、控制寄存器、状态寄存器
I/O 软件基本原理I/O 控制方式
程序控制 I/O:轮询方式,由 CPU 发出忙等指令,直至操作完成才能继续执行
中断驱动:当 I/O 操作结束后,主动通知工作已完成,不需轮询
DMA:直接存储器访问,由一个控制器完成内存与设备间的传输工作。
通道:一个内存数据传输的处理器
轮询工作方式
进程提出访问请求
驱动程序检查并向设备发出控制命令
驱动持续轮询设备是否完成任务
完成后返回,进程继续工作
实现简单,但 CPU 利用率低,轮询浪费资源
中断驱动方式
进程提出访问请求
驱动程序发出控制命令,并记录目标设备,CPU 继续工作
设备完成操作后向 CPU ...
BUAA-OS-Theory-Chapter4
第四章 进程与并发程序设计4.1 进程与线程进程概念的引入并发与并行
并发:只要某一时刻,活动1与活动2都处在运行状态,就称两者是并发执行的。
并行:两个程序在同一时刻运行在不同的处理机上,则称这两个程序是并行执行的
并发执行的特征:间断性、非封闭性、不可再现性
间断性:并发程序具有“执行 - 暂停 - 执行”的间断性规律
非封闭性:存在共享资源,使得程序之间会相互影响
不可再现性:在初始条件相同时,程序结果依赖于执行顺序
对于并发而言,偏重于开始 - 结束时间的区间上有重叠,两个程序不必在同一时刻都处于活跃状态;而并行则要求两个程序需要同时工作/活跃在 CPU 上,这需要多个处理机才能实现。并发的要求更加严格。
进程的定义与特征
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的基本单位。
进程具有动态性、并发性、独立性、异步性
动态性:进程是程序的一次调度过程,而程序是静态的实体
并发性:多个进程同时存在于内存中,能同时运行
独立性:进程是独立运行的基本单位
异步性:进程之间相互制约,存在相关联的关系
进程的结构:程序段、数据段、进程控制块 PC ...
BUAA-OS-Theory-Chapter3-2
第三章 内存管理 - Part2分页式存储管理
通过分页式存储管理可以把一个逻辑地址连续的程序装入到若干不连续的物理地址中,这可充分利用存储空间、减少移动带来的开销
主要针对的问题:
动态内存分配
碎片、紧凑问题
定义:
页:每个作业的地址空间分成的大小相同的片
存储块/页框:主存的存储空间也被分为与页相同大小的片
分页地址结构
页号 | 偏移量
分页式结构下,地址由两部分组成,页号可以是物理块号也可以是逻辑页号,两者可以转换
逻辑地址、物理地址在同一系统内的页/块内偏移位数(大小)一致
给定一个逻辑地址空间中的地址为 A ,页面的大小为 L ,则页号 P 和页内地址 d(从0 开始编号)为
$P=INT[\frac A L],d=[A]modL$
页面大小是由硬件决定的,通常选用$2^n$作为页大小,最常用的页面大小为4KB
若采用小页面:页内碎片、内存碎片减少,提高内存利用率;页面数多,页表占用内存大;换进换出速度降低,但效率高;若采用大页面则特点相反
分页开销为$\frac{se}p+\frac p 2$(页面大小$p=\sqrt{2se}$,进程平均字节 ...