①.内存管理
一分页机制:逻辑地址和物理地址分离的内存分配管理方案
程序的逻辑地址划分为固定大小的页(page)
物理地址划分为同样大小的帧(frame)
页表 逻辑地址与物理地址的映射
二分段机制:满足代码的一些逻辑需求
数据共享,数据保护,动态链接
通过段表实现逻辑地址与物理地址的映射关系
每个段内部是连续内存分配,段和段之间是离散分配
三分段与分页区别
页处于内存利用率的角度提出的离散分配机制
段处于用户角度,用于数据保护,数据隔离等用途的管理机制
页的大小是固定的,操作系统决定;段大小不确定,用户程序决定
四虚拟内存:通过把一部分暂时不用的内存信息放到硬盘上
局部性原理:程序运行的时候只有部分必要的信息转入内存
内存中暂时不需要的内容放到硬盘上
系统似乎提供了比实际内存大得多的容量,称之为虚拟内存
四.内存抖动
内存抖动(Thrashing)一般是内存分配算法不好,内存太小或者程序的算法不佳引起的页面频繁地从内存调入/调出的行为。
[即本质是频繁的页调度行为]
频繁的页调度,进程不断产生活页中断
置换一个页,又不断再次需要这个页
运行程序太多,页面替换策略不好,终止进程或者增加物理内存
②.进程的三种基本状态:
1>就绪( Ready)状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
2>执行( Running)状态:当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
3>阻塞( Blocked)状态:正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可以有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
③python操作
一Python哪些操作是线程安全的?
◆一个操作可以在多线程环境中安全使用,获取正确的结果
◆线程安全的操作好比线程是顺序执行而不是并发执行的 i +=1
◆一般如果涉及到写操作需要考虑如何让多个线程安全访问数据
二如何保证线程安全:
互斥量(锁):通过互斥机制防止多个线程同时访问公共资源
信号量:控制同一时刻多个线程访问同一个资源的线程数
事件(信号):通过通知的方式保持多个线程同步
三进程间通信的方式
共享内存,信号量,套接字:最常用,web应用
四Python中如何使用多线程
theading模块
◆threading.Thread类用来创建线程
◆start()方法启动线程
◆可以用join()等待线程结束
五Python中如何使用多进程
Python有GIL,可以用多进程实现cpu密集程序
◆ multiprocessing多进程模块
◆ Multiprocessing.Process类实现多进程
◆ 一般用在cpu密集程序里,避免GIL的影响
④.内存泄露
一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
⑤为什么Linux删除操作比界面化操作快
1.图像界面化操作的进程切换
2 缓存管理机制
3 磁盘