计算机操作系统:基础篇

本文概述了操作系统的核心概念,包括进程管理、内存管理、设备管理和文件系统,强调并发、共享、虚拟化和异步特性。还介绍了用户态与内核态的区别,系统调用、中断、DMA以及零拷贝等技术在提高效率中的作用,以及磁盘调度算法和大文件传输的最佳实践。
摘要由CSDN通过智能技术生成

操作系统的基础篇个人总结

操作系统:是最接近硬件的软件,用于管理软硬件资源,主要功能有进程管理、内存管理、设备管理、文件管理。
操作系统四大特性:并发(多个程序同时执行),共享(系统资源被并发的程序共享),虚拟(时分复用和空分复用技术把一个物理实体虚拟成多个),异步(进程是走走停停的,以什么样的速度向前推进是不可预知的)
用户态和内核态:操作系统的2种运行状态,处于用户态:cpu受限的访问数据,且cpu是可以被抢占。处于内核态cpu访问任意数据,且不会被抢占。为什么要设置2种状态:限制程序的访问能力防止危险操作如访问其他程序的数据、清内存,必须在内核态下操作。
哪些情况会发生状态转换:系统调用:用户态程序调用系统调用向系统申请资源、异常:即内中断,有当前指令引起,要切换到内核态处理、外中断:由外部引起的,当发生中断,cpu暂停执行当前指令,转去指向中断处理程序。
什么是中断:cpu停下当前工作,去处理其他事情,处理完继续执行任务。中断的作用就是为了提高系统面对突发事件的处理能力。
在这里插入图片描述

局部性原理:时间局部性和空间局部性:若执行了某条指令,则不久后他可能被再次执行(循环),若访问了某个存储单元,不久后它附近的存储单元可能被访问(连续存储)。如快表(存放最近被访问的页表项)。
计算机存储结构:快到慢:寄存器(位于cpu内部)-高速缓存(位于cpu和内存之间)-内存-磁盘。还有个磁盘高速缓存也叫内核缓冲区,逻辑上属于磁盘,物理上属于内存,存储最近访问过的数据。当要访问磁盘时,先访问磁盘高速缓存,若没有,先读入磁盘高速缓存,再拷贝需要的地方。
在这里插入图片描述

什么是文件:磁盘上一组数据的集合,他是数据最基本的存储单位。

磁盘调度算法:为了减少磁盘的寻道时间(磁盘臂移动到相应的磁盘块上的时间)。
先来先服务:按请求顺序进行,对寻道无优化。
最短寻道时间优先:每次从当前位置寻道最短的请求,但可能会出现饥饿,磁头可能在一小块区域来回动。
电梯算法:磁头只往一个方向移动,当处理完该方向所有请求,掉头。
循环扫描算法:与电梯算法类似,但它处理完一个方向请求后不是掉头,而是回到磁道起点
进程写文件时,进程发生了崩溃,已写入的数据会丢失吗:不会,因为进程执行write系统调用是写入了内核缓冲区,即使进程崩溃,内核数据也在。

DMA:进行数据传输时,数据拷贝的工作交给DMA控制器,cpu不参与搬运,处理别的事。
传统的文件传输:磁盘DMA拷贝到内核缓冲区,然后用户调用read切换到内核态cpu拷贝到用户缓冲区,再切换回用户态,再调用write切换到内核态cpu拷贝到socket,再切回用户态,socket通过DMA拷贝到网卡。4次状态切换和4次拷贝,这个过程可以优化:我们不过用户缓冲区:开始还是DMA拷贝内核缓冲区,然后调用sendfile系统调用,直接把数据拷贝到网卡,把文件描述符发给socket缓冲区。2次拷贝,2次状态切换,这就是零拷贝,全程没用cpu拷贝数据,都是通过DMA。
在这里插入图片描述
在这里插入图片描述

大文件传输应使用异步IO+直接IO:非阻塞、不用内核缓冲区,因为大文件占据内核缓冲区会导致小文件无法利用它。小文件直接用零拷贝。

大端:高位字节存在低地址;小端字节序:高字节存在高地址
判断自己主机是大端还是小端:

int a = 0x12345678; 
int b = (char)a; //只会留下低地址
if (b == 0x78) cout << "小端" << endl;
//16=2^4,即1个16位等于4个进制位占4bit,2个16位占8bit即1字节。
//若是小端:低地址-高地址:78 56 34 12;a转char留一字节的低地址。

网络通信中会使用htons, inet_addr把主机字节序统一成大端的网络字节序。

#include <iostream>
#include <arpa/inet.h>

uint16_t port = 6000;
const char* ip = "127.0.0.1";

int main() {
    //把port和ip转成大端网络字节序
    uint16_t port2 = htons(port);  //还有htonl
    auto ip2 = inet_addr(ip);

    //在网络上传输...

    //到了对端,反解
    uint16_t port3 = ntohs(port2);
    const char* p1 = inet_ntoa(in_addr{ip2});
}
  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值