阅读计算机系统这本书,觉得这本书看的有点晚了,毕竟我已经做了几年的sap了,作为一个basis(谐音贝斯手),我是参与了几个比较大的项目,从国企到民营企业几乎没有一个不认真做的,因为做项目也去过好多城市,比如嘉兴,北京,绵阳,淄博,广州,深圳,上海等,然后读了sap给的adm的书,对工作有帮助,然后还买了金圣俊的abap的书籍,终于在从事了三年的basis的工作后把程序这块看懂了,避免了好多坑。
尤其是系统的后台,做开发存在着大量的bug和限制,因为涉及到责任,所以会推责任很重要,学好abap,你就能做好basis的第二步了,这点还是后来才意识到,为时不晚。
最近在看考研的计算机的书籍,发现好多问题跟我的basis工作有关,真恨当时没时间学习这个,然后很多没补上,这边说一下,就是关于sap 的消息分发,你的机器作为消息分发机器,是需要接收消息和发送消息的,这个过程是几个进程一起作用的,每个进程是需要处于就绪状态的,然后就可以做工作了,每一个进程可以释放很多信息,但是接受和释放是两个过程,需要分开的,所以对程序来讲,它是需要分开写的。先要释放信息,然后再接收信息。假如两个进程,如下:
这里的意思就是p1这个进程已经占用了m1这个资源,但是他即将完成任务,要去占用m2这个资源。但是p2这个进程已经占有了m2这个资源,然后他也是快用完了这个资源,要去使用m1,但是基于这几个条件:
1.不同的进程不能同时占用一个资源。
2.假如进程不能找到新的资源占用,那么他的资源就不能释放。
3.进程之间不能抢占,只能在进程用完资源之后释放才行。
4.循环等待条件要有,即要有循环链,n个循环链要有n个等待的进程,而且要有n个资源需要被占用,属于一种循环。
这是条件,就是死锁需要这些个条件,如果你的条件达到了,那么恭喜你,系统崩溃是迟早的事情,这个时候就需要你去找个解决的办法,如果你的能力不够,那么可以去找程序员们解决这个问题。这里可能需要有阅读我这个blog的给个方案,怎么样才能解决,基于abap的程序,你是如何做的,才能解决。用tcode:sm12,如下:
enque/table_size – Size of the lock table managed by the enqueue server in the main memory. The lock table contains information on which locks are currently held by whom. You can check whether the update server is functioning correctly, since the lock table can grow very fast if the update function stops. If no update problems exist, you can use this parameter to increase the size of the lock table. Default value: 4096Kb
• rdisp/wp_no_enq – Number of enqueue work processes that are to run on this instance.
• rdisp/enqname – Name of the application server that provides the enqueue service.
sap主要有s和e锁。不像oracle有 x锁,所以你们看看不要弄混。另外,我想知道java或者python的程序里面除了有死循环,有没有死锁,其实可以出解决方案的,需要你们开动脑力,这里我是有点思路的,但是需要具体看;比如在设置进程的时候有一个第二机制,这个第二机制可以复制原process,这个process可以让你的原体隐身,然后让其他进程进来,这样就可以做到接触死锁。第二机制带有部分原体的属性,可以作为指引去探寻下一个可以使用的资源,然后这个本体处于隐身状态,即程序设置成空函数,然后返回0。然后找到新的资源的时候可以将空函数重新返回值,然后利用第二机制找到的资源,进一步占用新的资源,这里第二机制要包含原体的大体属性然后具有指针变量,可以显示新的资源的地址。这样就可以把资源找到了,大体的属性类似子程序,但是要有独立性,可以应对其他程序对他的排斥,并且可以作为指针程序使用。这样的话就让p2有了资源使用,然后p1至少有m2可以用,这样就不违反规则,不违反进程的互斥性,也满足其他,有学弟学妹们可以做出来,可以私底下发给我。
这个应用到sap里面估计也是有人用的