• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

系统小知识-1

2020-09-09

1. pool跟cluster有什么区别?

pool即池,若干个资源的集合,注意,仅仅只是集合,没有任何功能,正常情况下,池中可能有很多资源,这些资源可以没有任何关联性,也可以没有任何功能性的相似,比如,把阿猫阿狗阿鸡阿鸭放在一只笼子里,可以认为他们就组成了一个资源池,然后呢,没有然后,这就是pool。

cluster即集群,若干个资源的集合,赋予一些调度功能,一般情况下,集群中必定有很多存在的资源,这些资源彼此独立,但可以同时完成同一件事情,比如,两台服务器组成的服务集群,访问a或者b都能获得一样的结果,a挂了被t出去b接着接活,这就像把三只阿猫放在一个笼子里,组成一个集群,随便捞一只撸一撸,发出的都是猫叫声。

  • pool跟cluster有什么区别? - 进击的蜘蛛的回答 - 知乎

2. linux进程通信

2.1. 进程通信的应用场景

  • 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。

  • 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。

  • 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。

  • 资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。

  • 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

  • 进程间通信(IPC,InterProcess Communication)
  • POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准

    linux和windows都要实现基本的posix标准,linux把fork函数封装成posix_fork(随便说的),windows把creatprocess函数也封装成posix_fork,都声明在unistd.h里。这样,程序员编写普通应用时候,只用包含unistd.h,调用posix_fork函数,程序就在源代码级别可移植了

2.2. 进程通信的方式

2.2.1. 管道

在 Linux 中,管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和VFS的索引节点inode。通过将两个 file 结构指向同一个临时的 VFS 索引节点,而这个 VFS 索引节点又指向一个物理页面而实现的。

2.2.2. 信号量

信号量是一个计数器,可以用来控制多个线程对共享资源的访问.,它不是用于交换大批数据,而用于多线程之间的同步.它常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源.因此,主要作为进程间以及同一个进程内不同线程之间的同步手段.

2.2.3. 消息队列

消息队列是消息的链表,存放在内核中并由消息队列标识符标识.消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点.消息队列是UNIX下不同进程之间可实现共享资源的一种机制,UNIX允许不同进程将格式化的数据流以消息队列形式发送给任意进程.对消息队列具有操作权限的进程都可以使用msget完成对消息队列的操作控制.通过使用消息类型,进程可以按任何顺序读信息,或为消息安排优先级顺序.

2.2.4. 共享内存

共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问.共享内存是最快的IPC(进程间通信)方式,它是针对其它进程间通信方式运行效率低而专门设计的.它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步与通信.

2.2.5. 套接字

2.2.6. 信号

3. 寄存器大全

3.1. eax,ax,ah,al

  • eax:32位
  • AX:EAX的低16位
  • ,AH是ax的高8位,而AL是ax的低8位
    • 这2组8位寄存器可以分别寻址,并单独使用

3.2. 通用寄存器

3.2.1. 数据寄存器

  • AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.
  • BX(base):基址寄存器,常用于地址索引
  • CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器
  • DX(data):数据寄存器,常用于数据传递

3.2.2. 指针寄存器及变址寄存器

  • SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;
  • BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;
  • SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;
  • DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。

3.3. 指令指针

  • IP(nstruction pointer)指令指针,也就是程序计数器(英语:Program Counter,PC)在x86上的实现

3.4. 标志寄存器FR(Flag Register)

8086有一个18位的标志寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位(OF之类的)

3.5. 段寄存器

  • CS(Code Segment):代码段寄存器;
  • DS(Data Segment):数据段寄存器;
  • SS(Stack Segment):堆栈段寄存器;
  • ES(Extra Segment):附加段寄存器。

当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS

4. 文件描述符(file descriptor,fd)

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。

习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。尽管这种习惯并非Unix内核的特性,但是因为一些 shell 和很多应用程序都使用这种习惯,因此,如果内核不遵循这种习惯的话,很多应用程序将不能使用

4.1. 文件描述符与文件指针的区别

文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的非负整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。

文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符被称作文件句柄)

5. ELF vs PE

6. 系统进程

  • kthreadd进程: 是所有内核进程的父进程
  • init进程 : 是所有用户进程的父进程(或者父父进程)
  • zygote进程 : 是所有上层Java进程的父进程,另外zygote的父进程是init进程。
    • 安卓系统中所有App进程是由该进程fork产生的

Android 是运行于 Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。

7. 参考

  • 6种Linux进程间的通信方式 | 《Linux就该这么学》
  • 通用寄存器和段寄存器_RokrJyy的博客-CSDN博客
  • 文件描述符_百度百科
  • Operating System
  • Notes
linux文件系统笔记
redis速成
  1. 1. 1. pool跟cluster有什么区别?
  2. 2. 2. linux进程通信
    1. 2.1. 2.1. 进程通信的应用场景
    2. 2.2. 2.2. 进程通信的方式
      1. 2.2.1. 2.2.1. 管道
      2. 2.2.2. 2.2.2. 信号量
      3. 2.2.3. 2.2.3. 消息队列
      4. 2.2.4. 2.2.4. 共享内存
      5. 2.2.5. 2.2.5. 套接字
      6. 2.2.6. 2.2.6. 信号
  3. 3. 3. 寄存器大全
    1. 3.1. 3.1. eax,ax,ah,al
    2. 3.2. 3.2. 通用寄存器
      1. 3.2.1. 3.2.1. 数据寄存器
      2. 3.2.2. 3.2.2. 指针寄存器及变址寄存器
    3. 3.3. 3.3. 指令指针
    4. 3.4. 3.4. 标志寄存器FR(Flag Register)
    5. 3.5. 3.5. 段寄存器
  4. 4. 4. 文件描述符(file descriptor,fd)
    1. 4.1. 4.1. 文件描述符与文件指针的区别
  5. 5. 5. ELF vs PE
  6. 6. 6. 系统进程
  7. 7. 7. 参考
© 2024 何决云 载入天数...