操作系统:
1.硬件
2.软件
硬件:
硬件组成:冯诺依曼体系结构(普利斯顿体系结构)——>二进制
输入设备:键盘,麦克风,手写板
输出设备:音效,显示器
存储:内存,磁盘
CPU
注意事项:CPU和输入设备或输出设备之间不能直接交互,必须依靠中间的存储部分
内存和磁盘的区别:
1.内存读写速度要远远大于磁盘,内存读写速度是纳秒级别的,硬盘读写速度微秒级别的。
2.内存的价格远大于磁盘
3.内存中的数据不能持久化,电脑重启之后数据就没了;而磁盘的可以持久化
软件:
1.进程的初步认识
一个执行任务就是一个进程
可执行任务(.exe)不等于进程
PID是进程的身份ID,但是重启进程之后PID就变了
进程的本质:
PCB(进程管理模块)的结构体
PCB:
1.PID(主键ID,身份标识)
2.状态信息(就绪,运行,阻塞,终止)
3.优先级
4.记账信息(防止CPU资源分配不均)
5.一组指针(需要使用的资源)
6.上下文(当分配到CPU资源时执行,然后没有CPU资源之后,暂时保存自己当前的状态,等待下一次执行,这个过程叫一个上下文)
2.时间片:
操作系统的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。
任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。
这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发。
3.并发与并行
并发:多个进程在一个CPU下采用时间片轮转的方式,在一段时间之内,让多个进程都得以推进,称之为并发。
并行:多个进程在多个CPU下分别同时进行运行,这称之为并行
**并发:只有一个资源,轮流执行,就叫并发运行
**并行:所有应用一起运行,就叫并行运行
4.内核态与用户态
内核态和用户态:
用户程序的权限最低,称用户态
权限最高称内核态
总结:
硬件决定了软件的编写
OS:管理软件->
1.描述
2.组织管理类型:管理软件,管理硬件
职责管理:对外管理(用户部分),对内管理(内核)
进程:进程是操作系统分配资源的最小单位。
内核部分产生一个由双向链表组成的PCB(进程管理模块)
进程的属性:
1.PID(主键ID,身份标识)
2.状态信息(就绪,运行,阻塞,终止)
3.优先级
4.记账信息(防止CPU资源分配不均)
5.一组指针(需要使用的资源/ 进程占用的资源)
6.上下文(当分配到CPU资源时执行,然后没有CPU资源之后,暂时保存自己当前的状态,等待下一次执行,这个过程叫一个上下文)
并发;从宏观角度来看是一起执行的,从微观的角度来看是轮流执行的
并行:所有应用一起运行
最早的并发编程是多进程并发编程。
多个进程不能共享资源
线程:系统调度资源的最小单位,包含在进程之中
线程和进程的区别:
线程是进程执行的最小单位,也是进程执行的时间单位
一个进程中最少包含一个线程;线程必须依附进程之中
进程好比一个工厂,线程好比一个一个流水线
进程是系统分配资源的最小单位,而线程是系统调度的最小单位
进程不可以共享资源,而线程可以共享资源
单进程多线程:占用资源更少,
线程可以共享的资源:
1.打开的文件
2.内存(对象)
线程不可共享的资源:
——上下文,
——记账信息,
——状态
——线程栈信息
——优先级
线程的数量注意事项:
线程的数量不是越多越好
当线程的数量刚好达到某个合适的值是最好的,如果有太多线程就会出现线程之间的争抢和CPU过度调度的问题,而CPU调度是需要消耗资源的,所以线程不是越多越好
那多少线程是最好的:
答:要看具体的应用场景
密集计算的CPU任务,IO(文件读写)型任务
当使用的场景是计算型任务时,线程数量等于CPU的数量是最好的,IO型任务理论上线程数量越多越好。
并发编程:
进程->线程(轻量级的进程)->协程(轻量级的进程):golang(谷歌)