- 博客(22)
- 收藏
- 关注
原创 muduo源码阅读笔记之copyable和noncopyable
copyable和noncopyable主要是指示和限制当前类是否可以进行拷贝,以避免不必要的错误copyable类是一个空的标记类,指示所有继承copyable的子类都应该是值类型,也就是可以安全拷贝的,而之所以设置成protected,意味着该类无法产生对象,而只能派生子类/// A tag class emphasises the objects are copyable./// The empty base class optimization applies./// Any derived
2021-11-26 21:23:15
586
1
原创 muduo源码阅读笔记之日期与时间
日期与时间在程序中通产会使用如下的时间种类:日历时间:以年月日星期的方式表示,通常作为日志输出绝对时间:表示为从1970年1月1日以来的秒数clock时间:这是一个相对时间,表示从开启进程到此时的CPU tick数关于时区,由于世界不同的地区可能处于不同的时区,通常需要基于世界标准时间(UTC)进行时区转换,比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。而在muduo中,关于时间与日期的表示,有Date类,用来表示年月日的日历时间TimeStamp类,用来表示
2021-11-26 21:22:05
250
原创 muduo源码阅读笔记之类型转换
类型转换代码位置:base/Types.h这里定义了两种类型转换,implicit_cast和down_cast其中implicit_cast定义如下,可以看到只是封装了一个隐式转换,它与static_cast的区别在于,static_cast允许向上和向下转型,而implicit_cast只允许向上转型https://stackoverflow.com/questions/868306/what-is-the-difference-between-static-cast-and-implicit-
2021-11-26 21:20:12
348
原创 muduo源码阅读笔记之异常处理
异常代码位置:base/Exception.h base/Exception.cc其中noexcept表示当前函数不会产生异常,override表示当前函数是重写了父类的虚函数,异常处理是通过继承std的exception类实现的,其中重写了what和stackTrace函数class Exception : public std::exception{ public: Exception(std::string what); ~Exception() noexcept override
2021-11-26 21:18:46
285
原创 Tensorflow加载SavedModel模型过程源码阅读
首先关于SavedModel格式的介绍见Tensorflow SavedModel。Tensorflow源代码中关于SavedModel加载的函数定义文件位置如下图所示。最顶层的函数叫做LoadSavedModel,其中调用了LoadSavedModelInternal。进入LoadSavedModelInternal,其中加载参数的主要操作调用了RestoreSession。进入RestoreSession,可见到函数中主要进行了两个操作,一个是查找restore_op,并使用session
2021-04-13 22:22:16
705
原创 多容器共享内存测试
实验包含三个容器,其中container1中创建了一个300M大小的共享内存(System V),container2和container3共享container1的ipc namespace,不断从共享内存中顺序读取数据。运行container-1。查看container-1的内存使用,发现占用了307.6M。查看container-1中的共享内存,可以看到创建的共享内存。查看container-1中程序的内存使用,可以看到使用的物理内存和共享内存几乎相等。运行container-2。
2021-04-13 21:29:30
592
1
原创 大型网站架构读书笔记
大型网站软件系统的特点高并发,大流量(用户数量大)。高可用(必须7X24小时不间断服务)。海量数据。用户分布广泛,网络环境复杂(比如国外用户访问国内网站就要通过海底光缆)。容易遭受黑客攻击。用户需求变化快,需要快速迭代响应。大型网站架构演化过程初级阶段此时应用程序和文件以及数据库都在一台服务器里,用户量也少。比如租一个Linux服务器,用php写业务逻辑,部署在apache上,再加个MySQL。应用与数据分离此时发现一台服务器满足不了需求了,主要是用户数增加,数
2021-04-13 21:23:01
106
原创 xv6操作系统源码阅读之调度
xv6在sleep和wakeup的时候会发生进程切换,而且会周期性地在当进程在用户空间时发生进程切换。上下文切换过程上图展示了进程切换时的上下文切换的过程,首先一个用户进程通过中断或者系统调用陷入内核,此时发生用户态和内核态的切换,进程切换到自己的内核栈,再接着切换到上下文切换到调度器专属的内核栈,最后从调度器的内核栈切换到另一个用户进程的内核栈,最后从该内核栈返回用户态,即完成切换到了另一个用户进程。在如下的sched函数中,就发生了上述中的过程,在sched中调用了swtch函数,可以看到传入s
2020-09-18 17:46:40
1025
原创 xv6操作系统源码阅读之锁
在操作系统中,多个线程之间的竞争,多个CPU之间的竞争,多个中断过程之间的竞争都需要同步技术来保证程序操作数据的正确性。自旋锁xv6有两种锁,一种是spin-lock,另一种是sleep-lock,首先先看spin-lock。// Mutual exclusion lock.struct spinlock { uint locked; // Is the lock held? // For debugging: char *name; // Name of l
2020-08-26 11:27:02
483
1
原创 xv6操作系统源码阅读之中断和系统调用和驱动
在三种情况下,用户程序需要陷入内核。系统调用。来自用户程序主动调用请求内核服务。异常。来自用户程序本身的错误。中断。来自外部程序的中断信号。x86硬件机制在x86中,有四种特权等级,0到3,而操作系统只使用0和3级别,分别代表内核级和用户级。在x86中中断向量是由IDT(中断描述符表)维护的。在x86中如果要进行系统调用,需要使用int n指令,其中n代表在IDT中的中断向量的索引,int指令主要进行保护现场和跳转到中断向量的操作。系统调用过程在main函数中调用了tvinit函数来进行
2020-08-25 22:34:48
783
原创 xv6操作系统源码阅读之页表
硬件支持如上图,对于x86硬件来说,其在寻址时(保护模式下),会通过CR3寄存器找到页目录表的地址,接着虚拟地址的高十位会作为页目录表的索引,从而找到对应的页表,接着虚拟地址的中间10个bit会被作为页表中的索引,从而找到对应的页的物理地址,最后虚拟地址的低12位被用来指示其在页中的偏移,由于偏移量占了12位,也就意味着每一个页的大小为4k个字节。页目录表和页表都有1024条记录,这些记录的高20位对应的就是分配的物理地址,低12位为一些标志位,比如P标志位指示了当前该虚拟地址是否分配了物理地址,如果
2020-08-19 22:05:54
2127
原创 xv6操作系统源码阅读之init进程
首先看main函数,里面调用了一个userinit函数,这就是启动第一个init进程。// Bootstrap processor starts running C code here.// Allocate a real stack and switch to it, first// doing some setup required for memory allocator to work.intmain(void){ kinit1(end, P2V(4*1024*1024)); //
2020-08-04 14:02:09
1284
原创 xv6操作系统源码阅读之bootloader
当计算机启动时,首先运行的是保存在ROM中的BIOS程序,BIOS负责一些硬件初始化的工作,主要工作是加载bootloader,bootloader通常是保存在启动磁盘的第一个扇区(512字节)中,BIOS会把这512字节加载到内存中0x7c00的地址处,接着jump到该地址执行指令,也就是执行bootloader,而bootloader的主要功能就是负责加载并启动操作系统内核查看bootloader的汇编部分,第一句如下,可以看到是一条cli指令,也就是关闭中断,这是因为BIOS运行过程中是开启中断的,
2020-08-02 13:59:07
402
原创 xv6操作系统源码阅读之系统接口
xv6的系统接口是类Unix的,此篇文章是对xv6-book的Chapter0内容的总结Shell执行命令的过程简单看一下shell是怎么执行echo “hello world”这样的命令的在shell的main函数(sh.c)中可以看到如下循环: // Read and run input commands. while(getcmd(buf, sizeof(buf)) >= 0){ if(buf[0] == 'c' && buf[1] == 'd' &
2020-07-18 21:45:43
457
原创 Tensorflow Serving源码详解
Tensorflow Serving的启动过程分析在main.cc中有一个设置开启batching的选项还有一个设置batching参数的文件路径这些flags参数都会被解析到options这个对象中,接下来将这个options传入了开启server的函数,接着开启server接着进入server.cc,可以发现有一系列对于batching的设定,这里可以看到主要是对session_bundle_config这个变量进行了一些设置接下来根据session_bundle_config设置了
2020-07-16 16:45:39
1971
原创 openfaas请求处理流程详解
Service与Iptables对于一个函数请求而言,其由一个客户端发出,首先访问的是openfaas的gateway的service(如下图)。以ClusterIP的访问方式为例,即发出的http请求的访问地址为10.43.200.142,处理ClusterIP访问的方式是通过iptables。接下来详细看一下iptables中的处理流程。从PREROUTING链开始,可以看到其中有一个KUBE-SERVICES链,这个链就是对Service访问进行处理的。接着进入KUBE-SERVICES链
2020-07-16 16:17:37
1335
原创 震惊!某徐姓诗人竟,,
在南湖图书馆等车时记下的几首。尤其喜欢《翡冷翠的一夜》。雪花的快乐徐志摩 假如我是一朵雪花,翩翩的在半空里潇洒,我一定认清我的方向——飞扬,飞扬,飞扬,这地面上有我的方向。不去那冷寞的幽谷,不去那凄清的山麓,也不上荒街去惆怅——飞扬,飞扬,飞扬,——你看,我有我的方向!在半空里娟娟的飞舞,认明了那清幽的住处,等着她来花园里探望——飞扬,飞扬,飞扬,——啊,她身上有朱砂梅的清香!那时我凭藉我的身轻,盈盈的,沾住了她的衣襟,贴近她柔波似的心胸——消溶,消溶,消溶—.
2020-07-12 19:28:50
245
原创 一些面试题记录
C语言结构体的内存布局方式(内存对齐)(三个基本原则)C语言union内存对齐方式C++类的内存布局(虚函数表指针和虚继承指针)和对象存储空间大小计算生产者消费者问题(多个生产者,多个消费者,多个缓冲区,以及管理缓冲区的数据结构)extern C的意义memcpy,strncpy,strcpy的实现和区别memset的原理与实现C++枚举定义,使用,子节数计算面向对象的特点(封装,继承,多态)运算符重载C语言字符串操作函数C语言stati..
2020-07-12 19:27:12
119
原创 那些惊艳了岁月的诗词
《忆江南》唐 · 白居易江南好,风景旧曾谙;日出江花红胜火,春来江水绿如蓝。能不忆江南?江南忆,最忆是杭州;山寺月中寻桂子,郡亭枕上看潮头。何日更重游?江南忆,其次忆吴宫;吴酒一杯春竹叶,吴娃双舞醉芙蓉。早晚复相逢?《晓步》清 · 王国维兴来随意步南阡,夹道垂柳相带研。万木沉酣新雨后,百昌苏醒晓风前。四时可爱唯春日,一事能狂便少年。我与野鸥申后约,不辞旦旦冒寒烟。《狱中题壁》清 · 谭嗣同望门投止思张俭,忍死须臾待杜根。我自横刀向天笑,去留肝胆两昆仑。《献钱尚父》唐 · 贯.
2020-07-12 19:26:09
870
原创 可不就是平凡的世界
无意间刷到了《平凡的世界》电视剧,虽然依旧觉得毁原著,可又不想无聊致死,不想依旧被感染至此,唉!不知道以后的我再看这篇时会不会忆起现在的心情呢。《囚徒》普希金我坐在阴湿牢狱的铁栏后一只在禁锢中成长的鹰雏和我郁郁地做伴;它扑着翅膀,在铁窗下啄食着血腥的食物。它啄食着,丢弃着,又望望窗外,像是和我感到同样的烦恼。它用眼神和叫声向我招呼,像要说:“我们飞去吧,是时候了,“我们原是自由的鸟儿,飞去吧——飞到那乌云后面明媚的山峦,飞到那里,到那蓝色的海角,只有风在欢舞……还有我做伴!….
2020-07-12 19:24:22
150
原创 记《浪潮之巅》《硅谷之谜》《智能时代》
历史1830 莫尔斯发明电报。1860 爱迪生和GE公司,西屋和西屋电气公司发明电灯并推广电灯的普遍使用。1865 诺基亚公司成立,但是主营业务是木工厂。1875 贝尔和华生发明电话。1877 美国贝尔电话公司成立。1880 贝尔长途电话业务开通。1885 斯坦福大学成立。1890 GE公司成立。1892 贝尔公司长途电话业务进入美国中部芝加哥地区。1893 老利兰.斯坦福去世,斯坦福大学资金被冻结。1896 GE公司上市,是道琼斯指数包含的第一批公司之一。1898 诺基亚前身之一
2020-07-12 19:23:17
793
原创 记《大学之路》吴军
一个受过良好教养的人,应能清晰而有效地思考和写作;在某些知识领域具有较高的成就;对宇宙、社会及人类自身有深邃的理解;勤于思考伦理道德问题,具有明智的判断力和抉择力;具有丰富的生活经验,对于世界各种文化及时代有深刻的认识。 - -Harvard核心课程设计者Henry Rosovsky...
2020-07-12 19:21:43
363
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人