
现代操作系统
文章平均质量分 72
繁星意未平
一万年太久,只争朝夕
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux内核】物理内存组织结构
【Linux内核】物理内存组织结构系统调用mmap物理内存组织结构体系结构目前多处理器系统有两种体系结构:1)非一致内存访问(Non-Unit Memory Access,NUMA):指内存被划分成多个 内存节点的多处理器系统。访问一个内存节点花费的时间取决于处理器和内存节点的距离。2)对称多处理器(Symmetric Multi-Processor,SMP):即一致内存访问 (Uniform Memory Access,UMA),所有处理器访问内存花费的时间是相同。内存模型内存模型原创 2021-09-11 22:35:22 · 209 阅读 · 0 评论 -
【Linux内核】内存映射原理
【Linux内核】内存映射原理物理地址空间物理地址是处理器在总线上能看到的地址,使用RISC(Reduced Instruction Set Computing精简指令集)的处理器通常只实现一个物理地址空间,外围设备和物理内存使用统一的物理空间,有些架构的处理器把分配给外围设备的物理地址称为设备内存处理器通过外围设备控制器里面的寄存器来访问外围设备,寄存器分为控制寄存器,状态寄存器和数据寄存器外围设备的寄存器通常被常备连续的编址,处理器对外围设备寄存器的编址方式分为两种:I/O映射方式,内存映原创 2021-09-09 23:27:31 · 446 阅读 · 0 评论 -
【Linux内核】虚拟地址空间布局架构
操作系统内存管理学习笔记(Linux内核学习)1.Linux内核整体架构及子系统内核对下管理硬件,对上通过运行时库对应用提供服务用户空间使用malloc()分配内存通过free()释放内存内核空间虚拟进程负责从进程的虚拟地址空间分配虚拟页,sys_brk来扩大或收缩堆,sys_mmap负责在内存映射区分配虚拟页,页分配器负责分配物理页不连续内存分配器提供分配内存的接口vmalloc和释放内存接口vfree,申请连续的物理页的成功率比较低,可以申请不连续的物理页,r然后映射到连续的原创 2021-09-08 22:29:24 · 1244 阅读 · 4 评论 -
操作系统进程学习(Linux 内核学习笔记)
操作系统进程学习(Linux 内核学习笔记)进程优先级并非所有进程都具有相同的重要性。除了大多数我们所熟悉的进程优先级之外,进程还有不同的关键度类别,以满足不同需求。首先进程比较粗糙的划分,进程可以分为实时进程 和非实时进程(普通进程)。实时进程优先级(0-99)都比普通 进程的优先级(100-139)高。当系统中有实时进程运行时,普通进程几乎无法分到时间片(只能分到5%的CPU时间)。进程系统调用 讨论fork和exec系列系统调用的实现。通常这些调用不是由应用程序直接发出的,而是通过一个中原创 2021-09-04 19:38:28 · 177 阅读 · 0 评论 -
poll聊天室程序
poll聊天室程序客户端:#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>#include <stdio.h>#include <unistd.h>#include <errno.h>#include <string.h原创 2021-07-19 19:39:39 · 132 阅读 · 0 评论 -
TCP服务器epoll的多种实现
一会更新# TCP服务器epoll的多种实现对于网络IO会涉及到两个系统对象用户空间中进程或者线程操作系统内核比如发生read操作时就会经历两个阶段等待数据就绪将数据从内核缓冲区拷贝到用户缓冲区由于各个阶段多有不同的情况,一组合么就产生了多种网络 IO 模型阻塞IO明日更新...原创 2021-07-12 23:34:38 · 378 阅读 · 0 评论 -
windows网络编程
windows网络编程TCP编程服务端这里我们有几点需要注意:使用WSAStartup初始化网络库,即将与socket函数相关dll文件加载到进程地址空间中退出时,使用WSACleanup()卸载相关dll文件与Linux使用close函数关闭socket不同,windows需要使用closesocket函数关闭socketWSAStartup函数和WSACleanup函数是线程相关的,任何一个线程都可以调用,对于WSAStartup函数,某一个线程调用后,其他线程不需要调用,也可以使用;原创 2021-07-10 00:13:49 · 279 阅读 · 0 评论 -
第一个 Win32 窗口程序
第一个 Win32 窗口程序程序骨架 int WinMain(){ // 设计窗口外观及交互响应,注册,申请专利 RegisterClass(...) ; // 生产窗口 CreateWindow(...); // 展示窗口 ShowWindow(...); // 粉刷窗口 UpdateWindow(...); // 进入消息循环 while (GetMessage(...)); { // 消息转原创 2021-07-09 20:50:17 · 179 阅读 · 0 评论 -
Linux epoll的用法
Linux epoll的用法epollfd_create函数#include <sys/epoll.h> int epoll_create (int __size)参数含义__size此参数从Linux 2.6.8后就不再使用了,但必须设置成大于零的值返回值含义>0可用的epollfd-1调用失败epollfd_ctl函数有了epollfd,我们需要将要检测事件的fd绑定到这个epollfd上,或者修改或者移除,原创 2021-07-08 16:23:38 · 257 阅读 · 0 评论 -
获取socket对应的接收缓冲区中的可读数据量
获取socket对应的接收缓冲区中的可读数据量本文介绍如何获取当前socket对应的接收缓冲区的可读数据量在Linux上可以使用ioctl函数#include <sys/ioctl.h> int ioctl (int __fd, unsigned long int __request, ...)来看一个例子:#include <sys/types.h> #include <sys/socket.h>#include <sys/ioctl.h>原创 2021-07-07 17:31:29 · 2744 阅读 · 0 评论 -
connect函数在阻塞和非阻塞模式下的行为
connect函数在阻塞和非阻塞模式下的行为当socket使用阻塞模式时,connect函数会阻塞到有明确结果才会返回,如果网络环境较差,可能要等一会,影响体验,为了解决这个问题,我们使用异步connect技术创建socket,将socket设置为非阻塞模式调用connect函数,此时无论connect函数是否连接成功,都会立即返回,如果返回-1,不一定表示连接出错,如果此时错误码为EINPROGRESS表示正在尝试连接调用select函数,在指定时间内判断该socket是否可写,可写原创 2021-07-06 23:36:01 · 1848 阅读 · 0 评论 -
socket的阻塞模式和非阻塞模式(send和recv函数在阻塞和非阻塞模式下的表现)
socket的阻塞模式和非阻塞模式无论是Windows还是Linux,默认创建socket都是阻塞模式的在Linux中,可以再创建socket是直接将它设置为非阻塞模式int socket (int __domain, int __type, int __protocol)将__type增加SOCK_NOBLOCK不仅如此,在Linux上直接利用accept函数返回的代表与客户端通信的socket也提供了一个拓展函数accept4,直接将accept4返回的socket设置为非阻塞的send和原创 2021-07-06 22:27:02 · 19597 阅读 · 2 评论 -
Linux select函数用法和原理
select函数的用法和原理Linux上的select函数select函数用于检测一组socket中是否有事件就绪.这里的事件为以下三类:读事件就绪在socket内核中,接收缓冲区中的字节数大于或者等于低水位标记SO_RCVLOWAT,此时调用rec或read函数可以无阻塞的读取该文件描述符,并且返回值大于零TCP连接的对端关闭连接,此时本端调用rrecv或read函数对socket进行读操作,recv或read函数返回0在监听的socket上有新的连接请求在socket尚有未处理的错误原创 2021-07-06 17:55:39 · 1086 阅读 · 0 评论 -
Linux与C++11多线程编程(学习笔记)
多线编程与资源同步在Windows下,主线程退出后,子线程也会被关闭;在Linux下,主线程退出后,系统不会关闭子线程,这样就产生了僵尸进程3.2.1创建线程Linux 线程的创建#include <unistd.h>#include <stdio.h>#include <pthread.h>void* threadfunc(void* arg){ while (1) { sleep(1); print原创 2021-07-03 23:25:17 · 1435 阅读 · 2 评论