操作系统知识
1、操作系统的主要功能包括:
进程管理、存储管理、设备管理、文件管理、作业管理
2、操作系统的四个基本特征:并发、共享、异步、虚拟
并发:是指两个或多个事件在同一时间间隔内发生。操作系统的并发性是指计算机系统中同时存在多个运行着的程序,因此它应该具有处理和调度多个程序同时执行的能力。在这种多道程序环境下,一段时间内,宏观上有多个程序在同时运行,而每一时刻,单处理器环境下实际仅能有一道程序执行,故微观上这些程序还是在分时地交替执行。操作系统的并发性是通过分时得以实现的。(并行是指计算机系统具有可以同时进行运算或操作的特性,在同一时间完成两种或两种以上的工作。并行性需要有相关硬件的支持,如多流水线或多处理器硬件环境)。
共享:是指系统中的资源(硬件资源和信息资源)可以被多个并发执行的程序共同使用,而不是被其中一个独占。资源共享有两种方式:互斥访问和同时访问。
异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底。而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
虚拟:虚拟性是一种管理技术,把物理上的一个实体变成逻辑上的多个对应物,或把物理上的多个实体变成逻辑上的一个对应物的技术。采用虚拟技术的目的是为用户提供易于使用、方便高效的操作环境。
3、Linux文件或目录的操作权限对应的数值:
r: 4 (读取权限)
w: 2 (写入权限)
x: 1 (执行权限)
rwx-rw-r–
(1) (2) (3)
其中(1)表示user,文件所有者对文件的使用权限
(2)表示group, 文件所有组对文件的使用权限
(3)表示other,其他人对文件的使用权限
4、观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
5、死锁的四个必要条件以及解决措施:
互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某个资源仅为一个进程所占有
不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)
请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被 链中下一个进程所请求。即存在一个处于等待状态的进程集合{Pl, P2, …, pn},其中Pi等 待的资源被P(i+1)占有(i=0, 1, …, n-1),Pn等待的资源被P0占有。
解决措施:
1)破坏“不可剥夺”条件:一个进程不能获得所需要的全部资源时便处于等待状态,等待期间他占有的资源将被隐式的释放重新加入到 系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的资源以及新申请的资源才可以重新启动,执行。
2)破坏”请求与保持条件“:每个进程在开始执行时就申请他所需要的全部资源
3)破坏循环等待条件:将系统中的所有资源统一编号,进程可在任何时刻提出资源申请,但所有申请必须按照资源的编号顺序(升序)提出
6、僵尸进程和孤儿进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程完成对它们状态收集工作。
僵尸进程:一个进程使用 fork创建子进程,如果子进程退出,而父进程没有调用wait或waitpid函数获取子进程的状态信息,那么子进程的进程描述符仍然会保存在系统中。这种进程称为僵尸进程。
7、进程间通信的方式:
管道、消息队列、信号量、信号、共享内存、套接字(socket)
8、竞争不一定造成死锁,死锁也不一定是由竞争引起的,竞争可能导致死锁
9、最短寻道时间优先算法(SSTF)和扫描算法(也称为电梯调度算法SCAN):
用于系统中的磁盘访问,最短寻道时间优先算法处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短,而扫描算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。由于磁头移动规律与电梯运行相似,故又称为电梯调度算法。SCAN算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如FCFS算法和SSTF算法好。
python相关知识
1、python中的可变数据类型和不可变数据类型:
可变数据类型:列表、集合、字典
不可变数据类型:整型、字符串、元组
2、python装饰器
from functools import wraps
def to_decorator(func):
@wraps(func)
def wrapdecorator(*arg, **kwargs):
print("I'm going to decorating the function.")
func(*arg, **kwargs)
print("Finished the decoration.")
return wrapdecorator
def func_1():
print("Please decorate me.")
print()
@to_decorator
def func_2():
print("Please decorate me.")
func_1()
func_2()
Please decorate me.
I'm going to decorating the function.
Please decorate me.
Finished the decoration.
3、