构建Lua解释器Part0:综述

项目简介

        lua是一门精妙简洁,而功能强大的语言,学习和掌握它的核心机制有着重要的意义。这是一个仿制lua解释器的项目(参照的版本是Lua5.3),我希望通过逐步实现lua解释器的各个部分,更加深刻地掌握lua的基本结构和运作原理。本项目将分为多个部分完成,并为每一个部分附上一篇博文为该部分的设计和实现进行解析。开发这个项目的目的,并不是做一个能用于生产环境的lua解释器,而是尝试追寻前辈的步伐,尽最大可能理解其设计lua语言的思路,理解其中的关键细节。这是一个探索原理的旅程,因此效率并不是本项目要考虑的关键因素。这里我遵循的是”FIRST make it run, THEN make it run fast”[1]的原则,先让它跑起来。整个系列暂时不包含GC部分,不过这些开发量也足以消耗我大量的时间和精力。

[Read More]

关于sizeof的一些思考

前言

今天,我所在的技术群(qq185017593),讨论了sizeof的问题,聊得不亦乐乎,然而一个群友贴的代码,我感觉有一些漏洞,于是梳理了一下思路和知识点,特此记录一下。

[Read More]
C 

网络安全初探

写在最前面

  网络安全是个很大的话题,它包括了网络加密、数据真实性认证、终端身份认证、防火墙等技术,而网络加密、数据真实性验证,终端身份认证,则是网络安全中的重要一环,学习和掌握它具有重要意义,通过学习网络安全的相关知识,有助于我们理解生活中一些关于网络安全方面的现象。这样也可以做到知其然,并且知其所以然。最近一段时间,我发现自己对这块的掌握并不牢靠,于是参阅了一些资料和论文,主要的参阅资料是《Computer Networking A Top-Down Approach》的第八章Secure In Computer Networks,也包含了多篇paper。本文主要阐述网络加密、数据验证、身份验证的一些基本知识,并不涉及网络安全的其他方面。由于本人水平有限,有不正确的地方,欢迎批评指正,最后原创不易,转载请注明出处。

[Read More]

数据链路层漫谈

前言

  数据链路层,负责网络上,两个节点之间的数据帧通信,是最贴近硬件的一层。掌握数据链路层的知识,对我们理解网络中的一些现象具有极大的意义。这篇Blog,首先会介绍数据链路层的作用,以及基本结构和基本运作流程;紧随其后,我们将探讨数据链路层的转发设备,以及不同的设备构建的局部网络,数据帧传输的基本运作流程;最后我们将介绍在广播Channel中使用的链路层协议(Multi-Access Protocol)。本文的知识和观点主要来自于《Computer Networking A Top-Down Approach》一书,本Blog也将会大量引用该书的图文。
  本Blog的主要功能是对数据链路层知识进行梳理,而非对Top-Down中Link-Layer这一章节的翻译,而是经过自己的梳理而写的文章。最后由于本人水平有限,如有不当的地方,欢迎大家批评指正,大家可以将建议或者意见发到我的邮箱中1518986465@qq.com。

[Read More]

数据包在网络层中的传输

前言

好久没有写blog了,近一年来,不断在学习网络相关的东西,最近看了许多书籍和paper,觉得是时候该写一篇有关网络层相关的文章,来梳理一下自己所学的知识点。在写这篇文章之前,我大概看过《计算机网络(谢希仁著)》、《网络是怎样连接的》和《Computer Networking A Top-Down Approach》等几本书。早在刚开始决定学习一下网络原理之初,我选择了《TCP/IP详解 卷1》来看,不过结合个人的学习经历,相比于Top-Down,个人认为这本书其实并不适合刚入门的初学者看,它略过了太多的细节,相反《Computer Networking A Top-Down Approach》这本,不论在内容编排上,还是在内容阐述上都非常合理、清晰,循序渐进,对于想入门计算机网络的人来说,是绝佳的经典教程。
按照我自己的习惯,每经历一个阶段的学习,我就会进行一次知识的梳理和总结,今天写的这篇目的是通过阐述数据包在网络层中的流转,梳理网络层的整体结构,运作流程。最终串联各个知识点。本文将通过3个数据包流转的例子(其中一个是在一个很小的局域网内的传输,一个是在AS内的传输,还有一个是跨AS的传输),来逐步展现网络层的基本组成成分,以及不同规模情况下的基本运作流程。网络层数据包协议主要有IPv4和IPv6两种,目前广泛运用的仍然是IPv4,为了解决IPv4地址耗尽的问题,专家们提出了IPv6。本文探讨的内容,主要针对IPv4,不对IPv6作深入探讨。
本文旨在梳理网络层的基本结构和运作流程,并不涉及到网络层的方方面面,文章也会大量引用《计算机网络》、《网络是怎样连接的》、《Computer Networking A Top-Down Approach》以及其他一些论文的论述和插图,最后本人学识水平有限,如有疏漏,欢迎大家批评指正。

[Read More]

skynet源码赏析

写在最前面

skynet是目前使用比较广泛的服务端框架,虽然目前网上资料众多,但是从自己的学习和使用经历来看,缺乏能够让自己系统了解该框架底层机制的资料,这段时间,趁着自己有时间,阅读了skynet底层的一些代码,现在将自己理解的部分总结并记录下来,以备日后使用。本文旨在捋清skynet框架的结构和主要流程,并不会涉及skynet的方方面面,一些论述,我贴上了一些源码加以论证,并在引用的源码里加入了一些注释。

[Read More]
skynet 

《TCP/IP详解》数据链路层总结

数据链路层概述

  • 计算机网络的形成
    计算机最初只是孤立的一个运算机器,随着业务需求的不断发展,单台孤立的计算机已经不能够满足我们的需求,因此人们把一个区域内的多台计算机连接成一个网络即局域网,然而这些小的网络并不能满足对计算机日益增长的需求,因此把不同的局域网连接成一个全球性质的网络,我们称之为互联网,互联网就是把不同的局域网通过路由器连接起来的网络。

[Read More]

计算机漫游

Overview

我们的计算机能够运作起来,是我们将源代码编译成机器能够识别的二进制机器指令后,打包进可执行文件,并存入磁盘中。当我们运行一个程序的时候,首先会将磁盘内的二进制文件加载到内存中,然后通过CPU来解释和运行。为了能够做到,通过统一的方式使用不同型号的硬件,并且防止失控的程序滥用硬件资源,人们则通过操作系统来处理这些事情。此外操作系统还负责不同进程间的上下文切换,以实现多任务执行(分时调度不同的进程)。

[Read More]

mutex lock,spinlock,rwlock和condlock的理解

Mutex Lock

概述

互斥锁,一条线程加锁锁住临界区,另一条线程尝试访问改临界区的时候,会发生阻塞,并进入休眠状态。

具体说明

假设一台机器上的cpu有两个核心core0和core1,现在有线程A、B、C,此时core0运行线程A,core1运行线程B,此时线程B使用Mutex锁,锁住一个临界区,当线程A试图访问该临界区时,因为线程B已经将其锁住,因此线程A被挂起,进入休眠状态,此时core0进行上下文切换,将线程A放入休眠队列中,然后core0运行线程C,当线程B完成临界区的流程并执行解锁之后,线程A又会被唤醒,core0重新运行线程A

[Read More]
lock 

《TCP/IP详解》运输层总结

运输层协议公有特征

应用进程之间的通信

  • 两台主机之间的通信,实际上是两台主机上应用进程之间的通信
  • 主机上所有使用网络功能的应用进程,共享操作系统内核提供的网络通信功能
  • 因为操作系统上应用进程众多,因此为了将数据包准确交付给目标机器上的指定进程,因此需要通过端口号来区分不同的进程
  • IP+Port能够将数据包发送到指定机器上的指定进程
  • 运输层位于内核通信服务的最高层,接收应用进程交付的数据包,同时将收到的数据包交付给应用进程
  • IP层负责将数据包交付给目标机器,而运输层则负责将数据包交付给指定应用进程,部分运输层协议(如TCP协议)实现可靠数据交付,流量控制,拥塞控制和连接状态控制等。

[Read More]