Browsed by
Month: September 2015

计算机网络的体系结构(Computer Network Architecture)

计算机网络的体系结构(Computer Network Architecture)

计算机网络的体系结构 几个重要概念: 接口 服务 协议 哲学家模型: [哲学家模型的图片] 哲学家模型体现了两个重要的问题: 不同系统的对等层(peer layer)之间(秘书1与秘书2 翻译1与翻译2)存在协议   同一系统的上下层之间(哲学家1 与翻译1 , 翻译1 与 秘书1 )是服务和被服务的关系,不存在协议,服务的调用通过两层之间的接口进行 保持对上下层提供的服务不变的前提下, 对等层的协议可任意规定(如 两个翻译家可以都使用Spanish或者都使用Dutch进行交流 不影响哲学家收到正确的信息) 计算机网络的体系结构 1.ISO提出的 OSI/RM 七层结构 [七层结构图] 2.TCP/IP RM 结构 [五层结构图] 每一层的作用: 应用层: 提供各种应用程序服务 传输层:保证报文能够正确,按序到达 网络层:路由 网络硬件, 后来分为两层: 数据链路层: 比特差错校验 物理层: 实现透明的比特传输  

__attribute__ in C

__attribute__ in C

__atrribute__ in C Take a look at this code for example (in Cygwin master branch /winsup/cygwin/winsup.h) #include<stdio.h> __attribute__((constructor)) void fun1() { printf(“Hello “); } __attribute__((destructor)) void fun2() { printf(“Worldn”); } int main(void) { return 0; } Then gcc xxx.c and then run the code it will print out “Hello World” ~ So why it works? The code with constructor attribute run before main function and code with destructor attr run after main function The __attribute__ can do more than above…

Read More Read More

Linking

Linking

Linking Compiler Drivers When you run gcc -O2 -g -o p main.c swap.c ,These things happen First the C preprocessor translate main.cpp into main.i main.cpp—->(cpp)—->main.i cpp main.c /tmp/main.i Then main.i was compiled by C Compiler (cc1) into main.s main.i—->(cc1)—->main.s cc1 /tmp/main.i main.c -O2 -o /tmp/main.s Then the driver runs the assembler(as) and create a relocatable object file main.o main.s—->(as)—->main.o as -o /tmp/main.o /tmp/main.s Same things are done for swap.c Finally it runs the linker(ld) which combines main.o and swap.o and…

Read More Read More

Windows 下同步(多线程协调)的实现 的简单解释

Windows 下同步(多线程协调)的实现 的简单解释

Windows下的多个线程之间的通信,是通过各种Object进行的, 目前我只了解到EventObject, 下面简单介绍一下什么是EventObject . 我们可以把各个线程想象成一些不同的流水线,比如制作面包的流水线, 一个线程(流水线)负责制作面包,另一个流水线负责将面包包装好,那么这两个流水线就存在逻辑上的顺序, 即使他们同时工作,包装的如果不等制作面包的制作好,是无法进行的. 在系统里也是这样 两个(或者多个)线程之间有依赖关系, 比如B要在A完成后才可以处理,C要等D E完成之后才能处理. 那么,多个线程之间如何协调好这个关系呢. 这时候Windows就使用EventObject来给各个线程发送信号,EventObject可以有名字也可以没有名字, 带名字的在多线程同步时很常用(这里说明一下 ,多个线程之间协调工作就叫同步), 在多线程同步处理事件的时候 , 首先建立好一系列的EventObject(和其他Object) ,然后 线程A执行开始的时候 将EventObjectA设置为FALSE(没被触发状态) 这时 线程B在等待EventObjectA的信号(就是保持挂起状态,一旦有信号激活就会开始执行) , 然后线程A执行完毕之后 , 就会将EventObjectA设置为TRUE (触发状态) 这时, 由于EventObjectA被触发, 线程B也就同时启动了,然后开始执行线程B,这样就实现了线程之间的同步 有关NtCreateEvent和 EventObject的说明 参见msdn文档 https://msdn.microsoft.com/en-us/library/windows/hardware/ff566423(v=vs.85).aspx NtCreateEvent 的介绍 https://msdn.microsoft.com/en-us/library/windows/desktop/ms682655(v=vs.85).aspx EventObject的介绍