文章目录
1、现代操作系统(第3版)— Modern Operating Systems
操作系统的基本原理,包括进程、线程、存储管理、文件系统、输入/输出、死锁等,同时还包含了有关计算机安全、多媒体操作系统、掌上计算机操作系统、微内核、多核处理机上的虚拟机以及操作系统设计等操作系统概念
2、深入理解计算机系统(原书第2版) — Computer Systems: A Programmer’s Perspective
主要内容包括信息的表示和处理、程序的机器级表示、处理器体系结构、优化程序性能、存储器层次结构、链接、异常控制流、虚拟存储器、系统级I/O、网络编程、并发编程等
为程序员描述计算机系统的实现细节,帮助其在大脑中构造一个层次型的计算机系统,从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好地理解程序的行为为什么是这样的,以及效率低下是如何造成的。
3、归纳
平时开发或优化过程中遇到直接看《深入。。。》,不多说了 没事多品品
3.1、OS扮演的两个角色:魔术师和管理者
【计算机结构和虚拟内存: sylvanassun的博客给我们讲的很清楚了】
把差的东西变好,把少的东西变多,把复杂的东西变简单:
例如:通过进程抽象让每一个用户感受有一台自己独享的CPU;通过虚拟内存抽象,让用户感受物理内存空间具有无限扩张性。
如何利用硬件资源呢?分块,把硬件分块给应用程序使用。这就涉及到有效和公平的原则(大家一直优化的问题)
-
CPU :进程
-
内存: 虚拟内存(将少变多、共享)
-
外存:一切皆文件
-
I/O:(屏蔽差异、并发访问)
3.2、一切皆文件
目录、字符设备、块设备、 套接字、进程、线程、管道等都被视为是一个“文件”
文件描述符(file descriptor),简称fd
- 其中每一个文件描述符都是一个文件的索引,当然也可以出现多个不同的文件描述符索引同一个文件
- 操作,读写都可用**fopen()/fclose()/fwrite()/fread()**等函数进行处理。屏蔽了硬件的区别,所有设备都抽象成文件,提供统一的接口给用户。虽然类型各不相同,但是对其提供的却是同一套操作界面。更进一步,对文件的操作也可以跨文件系统执行。
VFS,是Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。
3.2、一切皆SOCKET
- 本地通信(IPC),有很多种方式,但可以总结为下面4类:
- 消息传递(管道、FIFO、消息队列)
- 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
- 共享内存(匿名的和具名的)
- 远程过程调用(RPC)
- 网络通信:
- socket起源于Unix,而Unix/Linux基本哲学之一就是一切皆文件;
- “打开open –> 读写write/read –> 关闭close”模式;
- 我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件;
- 几乎所有的应用程序都是采用socket!
4、ML
终归高大上的技术只有用在改变普通人的生活上,才能发挥其根本的价值。
一些简单的场景,恰恰是实践机器学习技术的最好地方。
4.1、对比
传统上计算机工作,给它一串指令,它遵照这个指令执行,有因有果,非常明确。
机器学习,是一种让计算机利用数据而不是指令来进行各种工作的方法。
4.2、思想
“统计”思想将在你学习“机器学习”相关理念时无时无刻不伴随,
相关而不是因果的概念将是支撑机器学习能够工作的核心概念。