帮别人写作业
__xa__
.
展开
-
引导程序示例
引导程序,mbr原创 2023-03-07 20:41:30 · 166 阅读 · 0 评论 -
程序加载器
仅在16位上有效,给别人写的.作用:模拟如何加载一个APP实际还要检索内存空间,这里省去;读取硬盘端口 [读取硬盘这部分可直接忽略] ;0x1f0 数据端口 ;0x1f1 错误端口 ;0x1f2 设置扇区数量 ;0x1f3 ~ 0x1f6 [ 0x1f6 中只占4 bit] 共28bit ;0x1f6 高4位 1110 , 111 -> LBA, 0 -> 主盘 ;0x1f7 状态控制端口 ; 写入 0x20 -> 准备读取, ; 读取后 and 0x8原创 2021-11-09 01:48:37 · 332 阅读 · 0 评论 -
win32asm 文本转换
反编译用.386.model flat, stdcalloption casemap:noneinclude windows.incinclude gdi32.incincludelib gdi32.libinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.libinclude comdlg32.incincludelib comdlg32.lib;对话...原创 2021-05-01 01:33:32 · 134 阅读 · 1 评论 -
sigwaitinfo
群里问 , 用信号处理函数还需要考虑可重入问题 , 各种中断调用, 有没有简单的方法;sigwaitinfo(sigset_t * set , siginfo_t * info) ;阻塞函数, 用来同步化的解决信号问题; 一旦待检测的 sigset_t * set 中有任一信号发生(pending) 即返回此信号,由于他检测的是pending信号, 话外之意就是你应该使用sigpro...原创 2019-07-08 23:50:48 · 2601 阅读 · 0 评论 -
pthread_sigmask
给群里的. apue和man里都有的; 对于线程信号,你应该忘记signal / sigaction ,他们只为单进程单线程设计pthread_sigmask 跟 sigprocmask 类似;sigprocmask 只能用于单进程单线程; fork的子进程拥有一份屏蔽信号拷贝;pthread_sigmask 用于多线程 ; 新线程拥有一份pthread_create那个线程的屏蔽信号...原创 2019-07-09 03:04:28 · 11121 阅读 · 4 评论 -
fork 线程与锁
给群里的;群里的人问, 多线程下调用fork , 但子进程没办法执行下去了,原因是子进程中也访问了同一把锁;fork的子进程将继承父进程锁的状态 , 如果fork时此锁已经被锁住了;一个模拟的例子:#include "util.h"#include <signal.h>#include <sys/mman.h>#include <semapho...原创 2019-07-09 05:02:44 · 544 阅读 · 0 评论 -
心跳检测,用oob实现
用select和msg_oob实现 心跳;对于oob数据 ,默认情况下 [ 不开OOBINLINE]:他不在接受缓冲区, 而在另1个缓冲区中,这个缓冲区只有一个字节,因此不论客户端以MSB_OOB发送N个字节的数据, 只有最后一个字节是OOB数据, 同理,因为只有一个字节的缓冲区,如果连续2次发送msg_oob , 那么后一次将覆盖前一次, 最后OOB是tcp头中的一个URG指...原创 2019-06-28 17:54:14 · 1176 阅读 · 0 评论 -
EPOLLOUT例子 EPOLLOUT触发条件
下面的代码都在ET下工作群里小伙伴没搞懂EPOLLOUT 再写2个例子; 2个例子都是回声服务器代码;关于EPOLLET的基础 , 以及EPOLLIN|EPOLLOUT|EPOLLET 一起注册的例子:EPOLLET简单例子下面2个例子都是关于EPOLLOUT,第一个例子利用EPOLL_CTL_MOD来触发EPOLLOUT,这种方式不太好,需要利用一次系统调用epoll_w...原创 2019-07-05 03:01:43 · 7617 阅读 · 1 评论 -
字节流例子
主要用于没法用struct的情况模拟文件的读写方式class bytes_stream{ char * pBuffer; unsigned int _write_pos; unsigned int _read_pos; unsigned int _size; int read_or_write;public: enum {REA...原创 2019-06-30 03:58:37 · 333 阅读 · 0 评论 -
epoll的http服务器
一个简易的http服务器 , linux下可直接运行代码里没有处理EPOLLOUT事件,需要处理的参考:EPOLLOUT触发条件代码可配合线程池使用 :线程池代码基于EPOLLOUT例子 EPOLLOUT触发条件第2个例子有很多细节上的东西都没处理, 只是一个简单的例子,下面代码中没有注释, 上面连接中的帖子里都有注释;例子只用firefox跑过;ser...原创 2019-07-11 02:28:05 · 229 阅读 · 0 评论 -
EPOLL IOCP OVERLAPPED NONBLOCK的一些说明
最简单的多线程 , 多进程最简单的多进程/多线程服务器代码都是用 一个线程 / 一个进程 来接受/发送数据 , 资源消耗太大,不合算; 相当于一对一 [ 一个老师管理一个学生的样子 ];因此有了 select / poll / epoll / iocp 模型 .select / poll 把多个socket交给一个数组来管理 ,epoll 把每个个socket 所关联的事件统一...原创 2019-07-07 04:07:30 · 330 阅读 · 0 评论 -
一个例子说明volatile
之前一个例子 :另人厌烦的线程安全单例以及不要使用双检测说到了volatile ,volatile本身跟线程没关系, 他只做了一件事:每次读取此变量时,都到内存中去读, 让编译器别优化.gcc -O 进行优化后, 自动变量(int a) 一般情况下都可能被存放在寄存器中;下面代码用回滚操作来说明 volatile 的作用:#include "util.h"#include ...原创 2019-07-07 14:27:00 · 197 阅读 · 0 评论 -
必须是select模型下的多线程发送,奇怪
给别人写的此版本升级的很奇怪的需求,随便改了一下;必须是select来接受数据 , 用另一个线程发送;为方便,直接写了个线程池;另外由于ClientData在这个对象在每个客户端进入时都会创建一个,每次直接newClientData将产生大量内存碎片,因此可使用 对象池来管理更灵活, 或者直接使用 内存池trans.h#ifndef CMD_HEADE...原创 2019-06-24 19:57:00 · 321 阅读 · 0 评论 -
简单的对象池
整体思路跟内存池差不多;对象池更灵活一些, 下面代码可以和内存池结合在一起使用;对象池的大概样子:对象池只是针对某一个特定的class使用有一个基类:template <typename T, size_t count > class ObjectPoolBaseClass ;任何想拥有池的class, 比如class A 只需继承ObjectPoolBas...原创 2019-06-27 01:32:26 · 186 阅读 · 0 评论 -
线程安全 可重入
昨天有人问可重入和线程安全, 实际是混在一起淘浆糊了;这2个是完全不同的概念;可重入函数只有在signal下会发生, 比如一个函数在执行时被中断, 在中断处理函数中又一次被调用,这2次(每次)调用都能产生正确的结果,那就个可重入函数;看一个不可重入的例子:void sig_handler(int sig){ ... gethostbyname("www...原创 2019-07-08 03:42:35 · 951 阅读 · 0 评论 -
简易win32线程池实现
线程池大致情况: 下面的代码没用c++封装,可自行封装,只提供了3个函数 :创建 , 添加任务, 停止并销毁线程池;思路:先起N个线程 ( _beginthreadex / pthread_create) ,问题是用什么办法先让这些线程暂停 , 并且让这些线程得到通知后再执行某个函数呢?下面的实现是用条件变量, 每次调用添加任务就发送一个信号 , 一旦某个线程抢占到 去某个[ 队...原创 2019-06-05 18:59:13 · 552 阅读 · 0 评论 -
线程池增强一点点版本
对 简易线程池增强内存的使用; 不再每一次malloc / free ; 把需要的内存先分配在deque中;代码中有些许地方的更改 , 添加了deque后, 不再malloc(thread_pool) 了 也不再memset(thread_pool);否则deque会出错;下面2个版本, c++版本更容易实现些, 有现成的容器和function模版版本1 , C版本:...原创 2019-06-06 18:02:16 · 205 阅读 · 0 评论 -
tcp 粘包 解包 少包 两种解决方式
产生现象的原因在于无法控制recv/send先直接上解决代码 , 下面有完整的测试代码 , 完整测试代码基于I/O复用 select c/s 网络模型: 的封装完整代码太长不建议查看,只要把下面2个方案搞懂就ok;下面的完整测试代码使用了第2个方案 , 2个方案没有谁好谁不好, 按情况使用;方式1: 比较简单, 读(写)到指定字节数为止. 就能保证一定能读(写) 到一个完整的包...原创 2019-05-29 18:28:37 · 1115 阅读 · 0 评论 -
多线程中对同一socket调用send/sendto
群里问多线程环境中对一个socket进行send 可以不可以;答:这个问题不是多线程问题 , 是TCP / UDP 的问题;如果是tcp ,这是个错误的设计,如果你无视数据顺序,那可以 ;如果是udp可以;TCP:在win32上,我没有找到send是否线程安全, 但找到了WSASend并不是线程安全的.因此假设send也不是线程安全的,仅仅假设;在posi...原创 2019-06-14 02:41:28 · 4895 阅读 · 1 评论 -
因多线程引起的new关键字说明
在线程安全单例以及不要使用双检测说了new产了3个步骤;分配内存 调用构造函数 把地址返回2 和 3 由编译器来完成;有的小伙伴不太懂,说明一下;先给结论:使用关键字(new,delete)和直接调用全局函数(operator new / delete ) 不一样的 , 编译器会做额外的事new关键字调用 先::operator new 分配空间 - >...原创 2019-06-19 01:05:10 · 958 阅读 · 0 评论 -
另人厌烦的线程安全单例以及不要使用双检测
群里热烈的讨论了线程安全的单例;一路从volitile扯到汇编,从代码到论文,真是够了;首先volitile 跟多线程没直接的关系,或许有些特定情况下会用到;至于spincout之类的实现,内部使用了volitile,这类就不多说了,有兴趣的可以自己看实现;千万别使用下面代码 ,不要使用双检测,不要使用双检测,不要使用双检测:static Singleton* Sin...原创 2019-06-17 01:26:07 · 185 阅读 · 0 评论 -
就给人写了个内存池
写了一个简单的内存池; 主要用于需要不断的创建和销毁对象已经重载了new/delete;基本使用就3个接口1. MemMgr::alloc 分配内存 (new 调用这个)2.MemMgr::dealloc 释放 (delete调用这个)3. MemMgr::createpool 创建内存池 ; 唯一需要额外调用的函数基本思想就是在每个内存块前加一个MemBlock用于管理...原创 2019-06-21 18:38:53 · 169 阅读 · 0 评论 -
最简单的多进程/多线程服务器代码
给群里朋友写的 . *nix 下:一个多进程 一个多线程 , 没太多意义的代码 ,只是简单收发, 没有处理粘包这一类问题,util.h中有实现;util.h#include <stdio.h>#include <errno.h>#include <unistd.h>#include <arpa/inet.h>#includ...原创 2019-07-01 17:20:52 · 322 阅读 · 0 评论 -
边缘模式EPOLLET EPOLLOUT简单例子
给群里写的,简单的EPOLLET 例子:EPOLLOUT详细说明下面2个服务器例子 ,一个没有处理EPOLLOUT, 另一个处理了;第一个例子只用来展示EPOLLET 的特点第2个例子是一个echo服务器, 处理了EPOLLOUT,如果要看EPOLLOUT的直接往下拉到第个例子, 主要还是看 errno == EAGAIN 这些地方在ET模式下:对于EPOLLIN...原创 2019-07-01 20:17:43 · 1779 阅读 · 0 评论 -
共享内存信号量
这文章 不知怎么了被仍进回收站了;除了用shm_open来mmap一块共享内存用普通文件也可:#include "util.h"#include <signal.h>#include <sys/mman.h>#include <semaphore.h>struct _shareobj{ sem_t mutex; int c...原创 2019-07-07 19:56:34 · 651 阅读 · 0 评论 -
I/O复用 select c/s 网络模型
需求:使用io复用(select) 实现一个服务器与客户端, 用于模拟用户登录,登出,以及广播消息;下面代码并没有解决粘包烧包 和解包的问题 , 具体解决方案: tcp 粘包 解包 少包 两种解决方式以下为win32平台, unix平台稍作修改即可运行;原本想用iocp或者eventselect 实现更为简单,但人说非得要用select,好把.下面代码的发送消息和接...原创 2019-05-25 02:03:29 · 272 阅读 · 0 评论