操作系统课我虽然上过,但是因为上操作系统课的时候,英语还很烂,听不懂老师说啥,此外,我之前从没有修过OS的先修课程,比如CSAPP或者系统编程之类的,所以学的很不扎实,当时吸收的效果一般,最近在准备面试,也遇到过操作系统的问题,如果从现在开始看操作系统的书,肯定是来不及了,所以要注意总结,搜集一些同学遇到的或者网上常考的题,努力去理解这些知识点。
NO.1 System Call
- System Call 是User Program向OS请求服务的一种方式,此时OS kernel拥有控制权
- 是从User Mode到Kernel Mode的一种Mode Switch,执行完后,再返回User Mode
- 举例就是最常见的fork()
NO.2 Process and Thread
- Process 就是正在运行的program
- 不同process的地址是彼此独立的,不能互相访问
- interprocess communication: Socket, File需要这些才可以实现线程间的互相访问
- Thread存在于process中(共享process的heap)
- 但是Thread还是有自己的stack和register
NO.3 Virtual Memory
- 如果使用单进程编程,没有任何问题
- 但是如果使用多进程编程,physical memory将会不连续,但是我们需要的是连续空间,有很多physical memory的碎片就没法利用,此时virtual memory就尤为重要
- page table可以将连续的virtual memory 转换成不连续的physical memory,达到可以利用非连续空间的效果
我也不是很确定virtual memory会怎么问,如果问我,我就这么回答,但是如果问比较深层次,估计就实在无能为力了。。
NO.4 Cache
- cache就是位于CPU和main memory之间的一个存储结构。。。比main memory小,但是比register大
- 如果需要值,就直接从cache中取,如果从第一层cache中取到,就是cache hit,如果没取到,就是cache miss,此时跑到下一层cache中,到最后,就会跑到main memory里面取
NO.5 Deadlock
NO.6 Atomic & Mutex & Semaphore
NO.7 Scheduler
本题也是我朋友面Akuna Capital时遇到的问题,这题我大概会,主要是因为不光操作系统学过,而且学并行计算的时候也编写过类似的程序,下面就介绍几种scheduler吧:
- First Come First Serve:就是先到就先运行
- Shortest Remaining Time First Scheduling:这个就是时间短的先跑,但是这个就有个问题。你怎么知道哪个时间短。。预测不可能百分百准确
- Priority Based Scheduling: 这个就是个process一个priority,根据priority前后走,其实我觉得时间长短也算是一种priority
- Round-Robin: 就是设定一个quantum,如果一个进程没有在规定quantum之内跑完,就让他自己去ready_queue的末尾
- Multilevel Feedback Queue: 就是不同level拥有不同的priority和quantum,如果在给定的quantum内没有完成任务,则去下一个level的ready queue的末尾。
我觉得主要就这几种了。
NO.8 TCP & UDP
最近刚开始学网易云课堂的计算机网络,因为这部分知识在面试中已经遇到很多次了,所以决定还是要补充一下自己的水平,另外将来学习系统设计面试题,学习web开发,不应该一点都不懂计算机网络,TCP & UDP的区别被考过三次,分别是Wepay, Two Sigma, Akuna Capital ,每次我都回答不知道,下次不能这么干了,现在的理解还是不全面,毕竟刚开始学,以后会不断完善这个问题:
- TCP:面向连接,需要client发送连接请求,server接收,并通知客户端,这样就连接好了,之后就可以发送消息接收消息;UDP: 无连接,直接name the socket,就可以发送给server了
- TCP更加可靠;UDP容易丢包
- 所以TCP适合web应用,文件传输等;UDP适合网络电话之类的丢包不会产生太大影响的应用。。UDP更加的自由。。
NO.9 Throughput & Latency