博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统简介
阅读量:6085 次
发布时间:2019-06-20

本文共 2212 字,大约阅读时间需要 7 分钟。

'''

操作系统
1. 内存管理
2. 驱动管理
3. 进程线程协程
4. 文件系统

1. 内存

32位电脑 4G
DOS 内存是程序自己控制
Windows 统一的内存空间 4G
虚拟存储器
1. CPU n核心 ALU cpu寄存器
2. 每个核心 L1 L2
3. 整个CPu L3 3M
4. 内存 很大很大8G
5. 硬盘
6. 网络传输

虚拟存储器,统一的内存模型

一个程序 4G 内存+硬盘
电脑4G
a 1G -> 内存中 页表
b 1G -> 内存中 页表

c 3G -> 把a存储,把c load进来

a => page fault

''''''
操作系统
1. 内存管理
2. 驱动管理
3. 进程线程协程
4. 文件系统

1. 内存

32位电脑 4G
DOS 内存是程序自己控制
Windows 统一的内存空间 4G
虚拟存储器
1. CPU n核心 ALU cpu寄存器
2. 每个核心 L1 L2 cache miss
3. 整个CPu L3 3M
4. 内存 很大很大8G
5. 硬盘
6. 网络传输

虚拟存储器,统一的内存模型

一个程序 4G 内存+硬盘
电脑4G
a 1G -> 内存中 页表
b 1G -> 内存中 页表

c 3G -> 把a存储,把c load进来

a => page fault => page load => 正常运行

2. 驱动

ps/2 usb bluetooth
flopy disk
linux: 统一成文件 read write seek
3. 文件系统
数组
[meta元信息 对应的文件位置(偏移量) 对应的文件大小]
格式化: 会把所有信息抹掉
快速格式化:meta清空

所有的问价你,存在同一个file

/main/main.py -> file load -> execute
'''

'''

1. 进程 pid 时间片
2. 多线程
3. 线程和进程
进程间通信 pipe file socket
线程通信 n线程来说 我都可以看到进程中的全局数据

对于一个进程来说,你持有了一个页表

对于同一个进程内的线程,你共享同一张页表
4. 多线程同步问题

数组 支持add

1. 把数组size + 1
2. 把add的这个数字放在 data[size]

两个线程 同时add

1. A线程 走了1
2. B线程 也走了1
3. A存了数据 data[size] = xxx
4. B也存了数据 data[size] = xxx

核心在于

你的操作被拆分
解决方案呢?
1. atomic swap_and_cmp
2. 加锁,mutex,信号量,读写锁,自旋锁。

加锁以后,我对这个资源有所有权,

在我所有操作没有结束前,
其他操作这个数据的人,就要等待

数组 支持add

1. 加锁
2. 把数组size + 1
3. 把add的这个数字放在 data[size]
4. 解锁

两个线程 同时add

1. A线程 走了1
2. B线程 也走了1
3. A 2
4. A 3
5. A 解锁
4. b走2,3,4

同步会有问题?产生了死锁

哲学家进餐

1. 为什么死锁?获取资源的顺序不一样

对于底下哲学家 先1后2
对于上面哲学家 先2后1

所有的哲学家都是先1后2

1. 调整最后一个人的顺序
2. 如果我那不到右手,那我左手的也不要

线程安全的交换数据的函数

swap(a,b)
id(a) id(b)
a.lock()
b.lock()
exchange(a.data, b.data)
a.unlock()
b.unlock()

swap(a,b) ------ swap(b,a)

Python? GIL global interpreter lock

并发 并行

不管你多少个线程,只要你系统能处理多个事情,就是并发的
并行 这些事情都是在同一时间执行的 多线程 多进程

同步异步 事件发生与否,需要你自己去检查

事件的发生与否,这个是别人通知给你的
阻塞非阻塞
阻塞 等
不等,就是非阻塞
'''

'''

编译 解释 JIT
编译? 一个代码编译成另外一种代码,编译到机器码,目标代码就是机器码
解释? c语言是统一的,那我用c语言写出一个虚拟机,这个机器是可以部署到任何机器的
python语言,语言逐条转换成对应的虚拟机指令
JIT just in time compiler 把最热的代码替换成编译到机器码

动态VS静态

a = ''
a = 1
a = True

a = ''

a = 'hello'
a = 'test'

强类型弱类型

1 + '1'
1 + 1

有GC 无GC garbage collection

new delete // malloc free c, c++
有gc: java golang python ruby scala js
new
1. mark & sweep concurrent mark sweep
2. ref counting

python

1. ref counting
2. mark & sweep

a b

a.parent = b
b.child = a

weakref

转载于:https://www.cnblogs.com/cuzz/p/8171323.html

你可能感兴趣的文章
jquery的confirm插件介绍
查看>>
PHP HTML混写,PHP中把大块HTML文本直接赋值给字符串变量的方法
查看>>
hadoop常见算法(持续更新)
查看>>
-1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 ...
查看>>
Latex: 参考文献双栏对齐
查看>>
在Xamarin.iOS项目中使用预设数据库
查看>>
朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下)
查看>>
【转载】Nginx 学习笔记(十一)nginx下安装配置naxsi waf防火墙(附完整编译、配置)...
查看>>
Session,有没有必要使用它?
查看>>
Version 2.6 (R2007b) Mapping Toolbox Software(matlab 角度转换函数)
查看>>
深入Linux设备驱动程序内核机制
查看>>
RIM警告黑莓手机容易被黑 已发安全补丁
查看>>
无法对 数据库'XXXXX' 执行 删除,因为它正用于复制
查看>>
转 Storm JAVA_HOME is incorrectly set.
查看>>
Objective-c开发中混合使用ARC
查看>>
局域网通过ip查mac地址、通过mac地址查ip方法
查看>>
Linux开机启动时执行脚本的方法
查看>>
pgsql数据库应用两点注意
查看>>
linux下查看CPU、内存、磁盘信息
查看>>
25幅精美绝伦的光涂鸦摄影作品
查看>>