如何理解c/c++和php语言的区别(12)


系统调用是为了方便使用操作系统的接口 , 而库函数则是为了人们编程的方便 。
16、系统如何将一个信号通知到进程?
内核给进程发送信号 , 是在进程所在的进程表项的信号域设置对应的信号的位 。进程处理信号的时机就是从内核态即将返回用户态度的时候 。执行用户自定义的信号处理函数的方法很巧妙 。把该函数的地址放在用户栈栈顶 , 进程从内核返回到用户态的时候 , 先弹出信号处理函数地址 , 于是就去执行信号处理函数了 , 然后再弹出 , 才是返回进入内核时的状态 。
17. fork()一子进程程后父进程的全局变量能不能使用?
fork后子进程将会拥有父进程的几乎一切资源 , 父子进程的都各自有自己的全局变量 。不能通用 , 不同于线程 。对于线程 , 各个线程共享全局变量 。
18. 请画出socket通信连接过程
19. 请用socket消息队列实现“同步非阻塞”和“异步阻塞”两种模式 , 并指出两者的差别和优劣
http://blog.csdn.net/yongchurui/article/details/12780653
四、网络编程
1. TCP头大小 , 包含字段?三次握手 , 四次断开描述过程 , 都有些什么状态 。状态变迁图 。TCP/IP收发缓冲区(2次)
头部大小是20字节 , 包含数据如下:
三次握手:
四次释放:
状态变迁图:
收发缓冲区:
2. 使用udp和tcp进程网络传输 , 为什么tcp能保证包是发送顺序 , 而 udp无法保证?
因为TCP发送的数据包是按序号发送 , 有确认机制和丢失重传机制 , 而udp是不可靠的发送机制 , 发送的对应端口的数据包不是按顺序发送的 。
3. epoll哪些触发模式 , 有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别 , 以及边缘触发在编程中要做哪些更多的确认)
epoll有EPOLLLT和EPOLLET两种触发模式 , LT是默认的模式 , ET是“高速”模式 。LT模式下 , 只要这个fd还有数据可读 , 每次 epoll_wait都会返回它的事件 , 提醒用户程序去操作 , 而在ET(边缘触发)模式中 , 它只会提示一次 , 直到下次再有数据流入之前都不会再提示了 , 无论fd中是否还有数据可读 。所以在ET模式下 , read一个fd的时候一定要把它的buffer读光 , 也就是说一直读到read的返回值小于请求值 。
也就是说在LT模式的情况下一定要确认收发的数据包的buffer是不是足够大如果收发数据包大小大于buffer的大小的时候就可能会出现数据丢失的情况 。
4. tcp与udp的区别(必问)为什么TCP要叫做数据流?
1).基于连接与无连接
2).对系统资源的要求(TCP较多 , UDP少)
3).UDP程序结构较简单
4).流模式与数据报模式
5).TCP保证数据正确性 , UDP可能丢包 , TCP保证数据顺序 , UDP不保证
6).TCP有拥塞控制和流量控制 , UDP没有
TCP提供的是面向连接、可靠的字节流服务 。当客户和服务器彼此交换数据前 , 必须先在双方之间建立一个TCP连接 , 之后才能传输数据 。TCP提供超时重发 , 丢弃重复数据 , 检验数据 , 流量控制等功能 , 保证数据能从一端传到另一端 。
是一个简单的面向数据报的运输层协议 。UDP不提供可靠性 , 它只是把应用程序传给IP层的数据报发送出去 , 但是并不能保证它们能到达目的地 。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接 , 且没有超时重发等机制 , 故而传输速度很快
5.流量控制和拥塞控制的实现机制
网络拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象 。拥塞控制是处理网络拥塞现象的一种机制 。数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制,以免数据丢失 。
6. 滑动窗口的实现机制
滑动窗口机制 , 窗口的大小并不是固定的而是根据我们之间的链路的带宽的大小 , 这个时候链路是否拥护塞 。接受方是否能处理这么多数据了 。滑动窗口协议 , 是TCP使用的一种流量控制方法 。该协议允许发送方在停止并等待确认前可以连续发送多个分组 。由于发送方不必每发一个分组就停下来等待确认 , 因此该协议可以加速数据的传输 。


推荐阅读