• Bachue Zhou
    2019-05-28
    iOS 可以大刀阔斧的改革的一个重要原因就是,这个操作系统的使用场景极为单一,全部都是直接面向用户的交互式应用。这点和通用操作系统 UNIX 有巨大的区别,例如它连 UNIX 最基本的命令行都没有,也没有 CS/BS 架构需求,大量 UNIX 进程间通讯都是为这些需求而设计的,需求没有了,自然底层机制也就不需要了。由此其实也可以看出来,通用操作系统应该是作为一个底层操作系统来用,只负责硬件抽象,而每一个系统应该根据自己的使用场景去设计一个上层操作系统,而不是直接拿底层操作系统充当上层操作系统用,或者将二者混为一谈,虽然这么多年来,人们已经习惯了这种设计,但这不是正确的。
    
     47
  • tim
    2019-06-05
    信号量(system V) 有一个属性是un-do,如果进程挂掉,这个进程获得的资源会释放。避免死锁饿死的问题

    作者回复: 👍,很好的补充

    
     8
  • ljf10000
    2019-05-28
    ios有点docker的意思

    作者回复: 是的,不过它出现得比docker早好多年。

    
     5
  • L-jiehui
    2019-05-28
    老师思维高度很高,再一次收获巨大,谢谢老师
    有两个问题请教下老师:
    1、操作系统如果不知道信号量的值多少才合理,不能统一按照自定义默认的值,例如0来处理吗
    2、虚拟内存实现进程隔离具体如何实现的呢,网上看了一遍资料,还是理解得不够清晰

    作者回复: 1、0未必与事实相符,不相符会导致逻辑错乱
    2、见我们前面 “07 | 软件运行机制及内存管理” 一节

    
     5
  • 💪😊
    2019-06-19
    非常同意作者观点啊!另外有个疑惑就是Chrome浏览器是多进程设计的,据说是为了追求性能,许总怎么看?

    作者回复: 从客户端软件角度,多进程、多线程甚至多协程的性能差异很小。所以思考不应该是从性能出发,我觉得应该从隔离性出发,多进程的好处是隔离性好,一个出问题不影响别人。

    
     3
  • Cordova
    2019-05-29
    我觉得iOS这样设计挺好的,本来就该思考这个系统面对的是什么样的使用场景,也许我们以后只需要一个用户进程呢、只不过这个用户进程功能很强大、当系统变得微小化、各种设备被变得多样化、不需要去协调用户进程、需要什么数据问问另外一个微系统设备就好啦、那这样我们的以后的系统就只需要为这一个进程保留一个套接字就好啦!所以iOS我觉得代表了以后的方向和趋势!反正听完许老师的课我是想法很多~不过可能明天早上爬起来又背着电脑,坐着公交去上班了。

    作者回复: 挺有想法的,不过所有的预见都应该建立在逻辑上,需求是怎样演进的,所以技术会怎么变,这才是架构师预见未来的判断法则。

    
     3
  • 张永刚
    2019-05-28
    第一次认识到操作系统架构设计
    
     3
  • Geek_04e22a
    2019-05-28
    老师,读了这篇文章,感觉收货颇丰,以前所有机制只认为是进程间通讯,没有想过重新划分同步互斥,资源共享,收发消息几类。现在有两个问题,iOS共享资源使用的是剪切板吗?Linux创建子进程目的是什么?

    作者回复: 1、剪贴板是这里拿来凑数的,它并不是惯常的进程间通信手段;
    2、Unix 系的操作系统认为所有进程都有一个祖先,进程关系构成一个进程树。

    
     3
  • 82
    2019-05-28
    1,ios进程单实例就没法做到android的应用双开能力吧?
    2,在使用url scheme进程通讯时,如果存在多进程实例,是否会让系统疑惑跳转到哪个进程?
    3,一台机器就是一个局域网,每个进程实例都是一个端,这种通讯思想似乎拓宽了网络的边界,无处不网络。

    作者回复: 1、是的,架构设计是选择,你没法兼顾
    2、这个是个理由;简单也可以是理由

    
     3
  • 有铭
    2019-05-28
    IOS的核心思路就是进程先天级别的隔离。可以认为它自带docker。但是我认为这个代价太大了。说真的如果不是IOS的自带逼格光环,这种隔绝程度的操作系统流行不起来的。并不是理论上先进的系统就一定好。很多时候还是需要现实的妥协
     1
     2
  • 郝志强
    2019-09-27
    从来没想过可以通过分析计算机系统的设计来了解架构知识,老师功力深厚。
    
     1
  • zhuyc
    2019-07-06
    "规格强调的是自然体现需求,所以规格是稳定的,是子系统的契约。"关注规格与契约的讨论,后面有没有机会更详细展开看看。
    我能理解接口与实现的分离,老师提到的规格似乎是更高层的概念

    作者回复: 规格就是指接口

    
     1
  • hua168
    2019-06-02
    一个软件只需启动一个进程实例。
    如果是多核,单进程不是浪费吗?
    我看nginx它是1核一个线程…
    
     1
  • Ender0224
    2019-05-31
    "为什么?因为进程可能会异常挂掉,这会导致同步和互斥的状态发生..."
    请教个问题,线程难道不会因为挂死而异常么? 如果这时候持有锁,其他线程同样的会持续拿不到锁而阻塞了。

    作者回复: 线程没法独立挂掉,进程会一起挂。

    
     1
  • BillyZhang
    2019-05-31
    有一点不太理解,IOS 是手机或是移动操作系统,linux和windows 是pc 或是服务器操作系统,虽然安卓也是基于linux 但是 使用场景还是不太一样的吧, 那么同是苹果操作系统 MacOS 是否也是沙箱设计模式呢?

    作者回复: macos 不是沙箱设计

    
     1
  • Aaron Cheung
    2019-05-28
    打卡13 深入操作系统进程架构
    
     1
  • 觉
    2019-05-28
    感恩大佬分享 随喜大佬
    
     1
  • Hungry
    2019-07-14
    老师,iOS也是有信号量dispatch_semaphone,pthread 锁,条件变量,以及 mmap 的,毕竟iOS也是BSD的一类,用kqueue的

    作者回复: 进程间可用么?

    
    
  • Lane
    2019-06-18
    很好的思考,我认为进程既然是资源隔离的,是没有必要共享内存,这里可以借助go的思想,要靠通信来共享。老师很自然的类比到了子系统的边界,本来UserService是个很单纯的用户信息的代码,有时和用户沾边的需求也放在这里,久而久之导致庞大而不纯粹。
    
    
  • Delia
    2019-06-17
    我们在Linux上做进程间通信的时候也选择的共享内存机制,速度确实很快。今天学了这节课,感觉思路又拓宽很多尤其是讲IOS的进程间通信,大开眼界。
    
    
我们在线,来聊聊吧