Believe it

相信不屈不挠的努力,相信战胜死亡的年轻

耦合

我们考虑一个web应用,使用三层架构: 视图层+业务层+持久层, 视图层依赖业务层,业务层依赖持久层,这是非常不好的现象,当我们的持久层需要改变的时候,整个项目都要改变,项目非常不稳定。

怎么解决

工厂!

阅读全文 »

maven依赖管理

maven工程可以帮助我们管理jar包的依赖,他有一个jar包仓库,这导致我们自己的项目会非常小。

maven启动

1
mvn tomcat:run

maven仓库启动

先本地,然后私服,然后中央仓库

Java代码

核心代码+配置文件+测试代码+测试配置文件 ## 传统项目

1
2
3
workspace
src
config

阅读全文 »

文件系统和文件

一种持久性存储的系统抽象。

文件头

储存文件信息,保存文件属性,跟踪那一块储存块属于逻辑上文件结构的哪一个偏移。

需要哪些元数据来管理打开的文件

文件指针,文件打开计数,文件储存位置,访问权限

访问2-12字节的空间

读一个或者多个扇区,然后返回

访问方式

基于顺序一次读取,随机访问,基于内容查找的访问

阅读全文 »

资源分配图

有两个集合,一个是进程集合,另一个是资源集合,如果进程i需要某资源j的一部分,则连边\(i\to j\), 如果一个资源j的一部分被分配给了进程i,则连边\(j\to i\), 资源分配图出现了有向环是发生了死锁的必要不充分条件。因为边只表示一部分资源的分配,而不是全部资源

死锁的必要条件

互斥、持有并等待、无抢占、循环等待

阅读全文 »

CPU调度

调度指标

CPU使用率(CPU忙状态所占的时间比例),吞吐量(单位时间内完成的进程数量),周转时间(一个进程从初始化到结束,花费的所有时间), 等待时间(进程在就绪队列中等待的总时间), 响应时间(一个请求从提交到产生相应所花费的时间) # FCFS first come first served 先来先服务 # SPN Shortest Process Next 短进程优先 (抢占或者不抢占) 导致长任务饥饿 # HRRN Highest Response Ratio Next 最高响应比优先,等待时间/执行时间 不可抢占,关注等待,防止无期限推迟。

阅读全文 »

线程管理

线程控制块 TCB

类似PCB # 线程优点 一个进程可以同时存在多个线程,各个线程之间可以并发执行,各个线程之间可以恭喜那个地址空间和文件资源。 # 线程缺点 一个线程崩溃会导致所属进程的所有线程崩溃。 # 进程与线程 进程是资源分配单位,线程是CPU调度单位 进程拥有完整的资源平台,线程只独享其中的寄存器和栈 线程也有就绪阻塞执行三种状态和状态转化关系 线程能减少并发执行的时间和空间开销,线程创建终止块,切换快,共享资源可直接进行不依赖内核通信。 # 用户线程和内核线程 用户线程操作系统看不到,内核线程操作系统看得到 # 用户线程 线程的创建终止同步和调度都是线程库实现的。TCB在进程内部 # 用户线程的缺点 当一个线程阻塞以后,整个进程都阻塞了,因为操作系统看不到用户心线程,只能看到进程。

阅读全文 »

进程管理

进程的组成

代码+数据+程序计数器中的值,堆和栈,一组资源(打开的文件) # 进程的特点 动态创建,并发或者并行,独立(执行的正确性不受其他进程影响) # 进程控制块(PCB) 操作系统为每个进程维护了一个进程控制块,用来保存与该进程有关的各种状态信息。是进程存在的唯一标示。 包含了进程标识信息(父进程,用户标识), 处理器状态信息保存区(用户可见寄存器,PC寄存器,程序状态字,栈指针), 进程控制信息(调度和状态信息、进程键通讯信息,储存管理信息,进程所用资源信息,数据结构连接信息) PCB的组织方式: 链表或者索引表 # 进程的创建的时机 系统初始化, 用户的请求,进程的请求

阅读全文 »

虚拟内存

覆盖技术

把一些不会相互调用的函数分配到相同的地址空间,当需要调用的时候覆盖内存就可以了。 需要程序员来设计,费时费力,模块的覆盖是时间换空间 # 交换技术 让暂时不运行的程序交换到磁盘中,当使用的时候换回内存。 只在内存不够的时候交换,磁盘的交换区的空间必须足够大,换出然后换入的时候物理内存不一定一样了,但是我们可以用虚地址解决这个问题。 # 虚存技术 像覆盖技术一样不把程序所有的内容都放入内存,想交换技术那样,只对进程的部分内容进行交换,

阅读全文 »