当前位置: 首页 > Linux

操作系统实现原理

时间:2023-04-06 18:50:23 Linux

写这些东西的目的是因为我是计算机专业的,但是学习的时候并没有认真学习计算机系统科学。工作后感觉自己的计算机基础知识并不扎实,虽然大家都是curd或者socket。男生。但是如果对底层知识没有了解,那么就不能更好的辅助开发!本专栏是我学习操作系统的心得和笔记,附上linux操作系统实现的代码专栏。变量名和变量类型变量名在汇编语言中是一个标号,什么是标号?标签是人性化内存地址的表象,最终被编译器转换成物理内存地址(区别于虚拟内存地址)。变量类型就是表名和变量在内存中占用的大小!整数=4;程序集是.adb4;访问变量是通过变量的起始地址+内存中变量类型栈和堆的大小1.1.2寄存器1.1.2硬盘1.2汇编1.2.1标签1.2实模式什么是实模式?实模式寄存器2.1实模式内存寻址/分段机制16位8086CPU寻址2.2实模式汇编指令mov数据传输指令说明movs(b/w/d/x)seriesset中字符串的复制memory需要结合cld和std和reploop循环指令dbdwcbw和cwd指令convertbytetowordconvertwordtodoublewordcmpcompareflagbitschangecmpsbcmpswcmpsdj系列条件跳转指令jmp无条件跳转指令操作类型汇编addadcincdecsubmuldividiv位操作指令notorandxorcallandret位移动指令ror(rotaterotationright)rolshrshl堆栈操作指令pushpushf/pushfdpoppopf/popfdlgdt全局描述符设置指令sgdt中断指令int3int中断号进入中断溢出指令iretcli(清除中断标志)和sti改变标志寄存器hlt的if标志处理器停止执行指令,cpu可以被外部中断指令唤醒Arpl调整段选择器的rpl值1.2保护模式内存寻址in保护模式1.2。1全局描述符lgdt和sgdt1.2.2保护模式下的特权级1.3内存分页/虚拟地址函数与汇编函数名和标号相同,只是地址的人性化显示,最终会转换成实际的数字地址由编译器//定义一个函数,这个函数本身不存储intabc(inta,intb){intd;returna+b;}.abcdbdadda,bmoveax,aret//call函数,需要使用Tothestackabc(3,4)push4push3callabc;//将当前地址压入栈中然后跳转到abc地址执行1.6I/O汇编特权级概述1.7中断与系统(函数)调用8259a编程使用0x15中断获取内存大小2内存管理模块1.1位图和地址池3任务模块(线程/进程)3文件操作系统1.1文件操作系统概述(布局)1.2硬盘驱动器写入(异步),interrupt)内核层对于文件的处理是异步进行的。读取时会告诉驱动程序要读取的扇区号(如读写磁盘)和要读取的缓冲区地址。驱动程序在向文件控制模块发送指令后会做其他事情。当硬件完成工作后,会向CPU发出中断信号被内核捕获,内核会从中断点继续执行1.3线程和进程回收(父进程、子进程和init进程)进程间通信4socket编程(网络编程/网络进程通信)https://www.jianshu.com/p/f86...高性能网络编程I/O模型(同步/异步阻塞/非阻塞)https://baijiahao.baidu.com/s?id=1610863451630993378&wfr=spider&for=pcblockingio是自解阻塞和线程/进程进入阻塞状态的5种网络编程模型https://blog.csdn.net/qq_2910...单点多进程多线程几乎所有的IO接口(包括socket接口)都是阻塞的。这就给网络编程带来了很大的问题。例如,在调用send()时,线程将被阻塞。在此期间,线程将无法进行任何计算或响应任何网络请求。一个简单的改进是在服务器端使用多线程(或多处理)。多线程(或多处理)的目的是让每个连接都有一个独立的线程(或进程),这样任何一个连接的阻塞都不会影响其他连接。使用多进程还是多线程,没有特定的模式。