- 博客(54)
- 收藏
- 关注
原创 14.多播与广播
假设大家经营网络电台,需要向用户发送多媒体信息。如果有1000名用户,则需要向1000名用户发送数据;如果有10000名用户,则需要向10000名用户发送数据。此时,如果基于TCP提供服务,则需要维护1000个或10000个套接字连接,即使用UDP套接字提供服务,也需要1000次或10000次数据传输。像这样,向大量客户端发送相同数据时,也会对服务器端和网络流量产生负面影响。可以使用多播技术解决该问题。
2025-07-20 20:55:19
810
原创 13.多种I/O函数
之前的示例中,基于Linux的使用read&write函数完成数据I/O,基于Windows的则使用send&recv函数。这次的Linux示例也将使用send& recv函数,并讲解其与read&write函数相比的优点。还将介绍几种其他的I/O函数。
2025-07-19 15:14:24
962
原创 12.I/O复用
本章将讨论并发服务器的第二种实现方法—基于I/O复用(Multi-plexing)的服务器端构建。虽然通过本章多学习一种服务器端实现方法非常重要,但更重要的是理解每种技术的优缺点。如果能掌握每种技术的优劣,就可以根据特定目标灵活应用不同模型,而不是仅关注功能实现。
2025-07-13 21:07:52
926
原创 11.进程间通信
进程间通信(InterProcessCommunication)意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应提供两个进程可以同时访问的内存空间。
2025-07-06 16:17:50
991
原创 10.多进程服务器端
大家已对套接字编程有了一定的理解,但要想实现真正的服务器端,只凭这些内容还不够哦。因此,现在开始学习构建实际网络服务所需内容吧!
2025-06-24 23:41:58
800
原创 第一部分 -- ①语法分析的概要
简单地介绍一下负责代码分析的语法分析器的相关内容,接着对描述cbc的解析器所使用的JavaCC这一工具的概要进行说明
2025-06-10 22:52:16
849
原创 9.渐入佳境 -- 套接字的多种可选项
我们之前写的程序都是创建好套接字后(未经特别操作)直接使用的,此时通过默认的套接字特性进行数据通信。之前的示例比较简单,无需特别操作套接字特性,但有时的确需要更改。
2025-05-12 22:32:21
751
原创 30天开发操作系统 第27天 -- LDT与库
大家早上好,我们今天的第一个任务就是修复昨天晚上的那个bug。是个什么bug来着?就是用nsct命令运行的应用程序,无论是按Shift+F1还是点击窗口的“x”按钮都没有反应的那个bug啦。我们得先来找到出问题的原因,然后才能采取对策。从昨天晚上到今天早上一直在思考这个问题,想来想去暂时能得到的结论是,昨天编写的内容貌似没有什么问题,因此这个bug可能之前就已经存在了,只是我们没有发现而已。
2025-05-05 22:59:21
882
2
原创 8.渐入佳境 -- 域名及网络地址
提供网络服务的服务器端也是通过IP地址区分的,但几乎不可能以非常难记的IP地址形式交换服务器端地址信息。因此,将容易记、易表述的域名分配并取代IP地址,这就是域名。
2025-05-05 09:23:18
910
原创 30天开发操作系统 第26天 -- 为窗口移动提速
昨天我们增加了可同时启动的应用程序的数量,窗口也跟着变多了,整个画面变得热闹起来。话说,在对比color.hrb和color2.hrb的时候我们需要移动窗口,那个时候笔者感到窗口移动的速度很慢。在真机环境下的速度还算可以接受,但在QEMU下就慢得离谱,让人心烦。虽说在真机环境下速度不慢就可以了,但如果速度能再快点总归是件好事。因此,提高窗口移动的速度就成了我们今天的第一个课题。
2025-04-20 20:12:20
785
原创 7.渐入佳境 -- 优雅的断开套接字连接
TCP中的断开连接过程比建立连接过程更重要,因为连接过程中一般不会出现大的变数,但断开过程有可能发生预想不到的情况,因此应准确掌控。只有掌握了下面要讲解的半关闭(Half-close),才能明确断开过程。
2025-04-13 16:36:46
884
原创 6.好事多磨 -- UDP网络连接
我们通过第4节和第5节学习了TCP相关知识。TCP是内容相对较多的一种协议,而本节介绍的UDP则篇幅较短。虽然比TCP内容少,但在实际操作中很有用,希望大家认真学习。
2025-04-12 15:58:55
928
2
原创 5.好事多磨 -- TCP网络连接Ⅱ
第4章节通过回声服务示例讲解了TCP服务器端/客户端的实现方法。但这仅是从编程角度的学习,我们尚未详细讨论TCP的工作原理。因此,将详细讲解TCP中必要的理论知识,还将给出第4章节客户端问题的解决方案。
2025-04-02 15:31:20
938
1
原创 4.好事多磨 -- TCP网络连接Ⅰ
我们已经学习了创建套接字和向套接字分配地址,接下来正式讨论通过套接字收发数据。之前介绍套接字时举例说明了面向连接的套接字和面向消息的套接字这2种数据传输方式,特别是重点讨论了面向连接的套接字。这次将具体讨论这种面向连接的服务器端/客户端的编写。
2025-03-18 23:01:17
1163
原创 3.水中看月
IP是InternetProtocol(网络协议)的简写,是为收发网络数据而分配给计算机的值。端口号并非赋予计算机的值,而是为区分程序中创建的套接字而分配给套接字的序号。
2025-03-16 20:01:35
906
1
原创 1.从入门到放弃
网络编程领域需要一定的操作系统和系统编程知识,同时还需要理解TCP/IP网络数据传输协议。这么说来,网络编程确实需要一定的基础知识,但相比于其他领域,它更有趣,没有想象中的那么难。
2025-03-12 23:13:06
824
原创 30天开发操作系统 第25天 -- 增加命令行窗口
增加更多的颜色(1)(harib22b)增加更多的颜色(2)(harib22c窗口初始位置(harib22d)增加命令行窗口(1)(harib22e)增加命令行窗口(2)(harib22f)增加命令行窗口(3)(harib22g)增加命令行窗口(4)(harib22h)变得更像真正的操作系统(1)(harib22i)变得更像真正的操作系统(2)(harib22i)
2025-03-02 19:57:29
774
原创 30天开发操作系统 第24天 -- 窗口操作
窗口切换(1)窗口切换(2)移动窗口用鼠标关闭窗口将输人切换到应用程序窗口用鼠标切换输入窗口定时器API取消定时器
2025-02-27 23:45:09
706
原创 30天开发操作系统 第23天 -- 图形处理
如果apimalloc只是调用操作系统中的memman_alloc, 并将分配到的内存空间地址返回给应用程序的话,是行不通的,因为通过memman_alloc所获得的内存空间并不位于应用程序的数据段范围内,应用程序是无法进行读写操作的。如果 应用程序在不知情的情况下执行了读写操作,将会产生异常并强制结束。 图形处理 :画图
2025-02-23 16:54:47
739
原创 Ⅳ.Thread Cooperation 1
我们之前实现过两个数组求和,把结果放到第三个数组中。这次我们要用代码块(blocks)内设置多个线程来实现GPU绘图
2025-02-16 11:52:56
543
原创 30天开发操作系统 第 21 天 --保护操作系统
保护操作系统:先总结一下昨天最后遇到的情况: hello.hrb运行正常,但hello2.hrb却出现异常。为什么会这样呢? 想了一下, 应该是内存段惹的祸。 显示单个字符时, 我们用[CS:EC]的方式特意指定了CS(代码段寄存器),因此可以成功读取msg的内容。但在显示字符串时,由于无法指定段地址,程序误以为是DS而从完全错误的内存地址中读取了内容,碰巧读出的内容是0,于是就什么都没有显示出来。因此,我们需要在API中做个改动,使其能够将应用程序传递的地址解释为代码段内的地址。
2025-02-15 12:36:17
1041
原创 30天开发操作系统 第 20 天 -- API
昨天我们已经实现了应用程序的运行, 今天我们来实现由应用程序对操作系统功能的调用(即API, 也叫系统调用)。 为什么这样的功能称为“系统调用”(system call)呢?因为它是由应用程序来调用(操作)系统中的功能来完成某种操作, 这个名字很直白吧。 “API” 这个名字就稍微复杂些,是“application program interface" 的缩写, 即“应用程序(与系统之间的)接口”的意思。
2025-02-12 22:20:01
1827
原创 30天开发操作系统 第 17 天 -- 命令行窗口
所谓命令行窗口,就是大家在运行 “make run” 的时候所使用的那个黑底白字的,在里面输入文件名就可以运行程序的东西。接下来我们就做一个试试看。 “这玩意儿能算是命令行窗口吗?”我们一开始做出来的东西很可能带来这样的疑问,不过 没关系,我们会让它逐步发展壮大,最终实现可以启动应用程序的功能。你看,是不是越来越像个操作系统的样子了呢?大家一定迫不及待了吧。我们并不打算将命令行窗口作为任务A的一部分,而是单独做成一个新的任务。这样一来,就像任务B0-B2-样,我们可以很容易地创建多个命令行窗口。
2025-01-22 21:43:49
1473
1
原创 30天开发操作系统 第 16 天 -- 多任务 v2.0
昨天我们已经实践了很多关于多任务的内容,不过今天我们还得继续讲多任务。可 “老是讲多任务都听腻了啊!”,但多任务真的非常重要(当然,如果你不想做一个多任务的操作系统 那就不重要啦)。从咱们制作的操作系统角度来说, 希望大家能够在充分做好多任务机制的基础上,再利用多任务逐步完善操作系统本身。因此,大家再稍微忍耐一下吧。 在昨天,我们已经实现了真正的多任务,不过这样还不够完善,或者说不太好用。如果我们想要运行三个任务的话,就必须改写mt_taskswitch的代码。这样的设计实在太逊了,如果能像当初定时器和窗口
2025-01-20 22:26:34
1122
原创 30天开发操作系统 第 15 天 --多任务 v1.0
多任务这个东西还真是奇妙,它究竟是怎样做到让多个程序同时运行的呢?如果我们的电脑里面装了好多个CPU的话,同时运行多个程序倒也顺理成章,但实 际上就算我们只有一个CPU,照样可以实现多任务。 其实说穿了,这些程序根本没有在同时运行,只不过看上去好像是在同时运行一样:程序A 运行一会儿,接下来程序B运行一会儿,再接下来轮到程序C,然后再回到程序A....·如此反复。
2025-01-17 22:42:07
1201
原创 30天开发操作系统 第 14 天 -- 高分辨率及键盘输入
那么我们赶快把操作系统我们的做得更像一个真正的操作系统吧。 大家现在可以接触多任务了。可是按计划,我们是从第15天开始才学# 可多任务的,所以今天还是暂时不学习多任务吧。 所以今天打算学点儿别的。 学点儿什么呢?好吧, 就学提高画面分辨率吧。 嗯, 从开发操作系统的角度来看, 现在这样的320x200的画面也没什么问题, 可毕竟还是大画面好。 打印键盘输入
2025-01-15 20:27:52
898
原创 Ⅲ.parallel programming in CUDA C(GPU并行程序实现数组求和 & Julia set)
GPU的并行版本数组求和,julia set(图片渲染结果)
2025-01-12 20:50:24
1278
原创 30天开发操作系统 第 13 天 -- 定时器 v2.0
我们之所以如此专注于定时器的改良,理由很简单,是因为在今后的开发中会经常使用定时器。经常使用的东西当然要做好。同理,我们也努力地改进了图层控制程序。测试性能的方法很简单:先对HariMain略加修改,恢复变量count,然后完全不显示计数,全力执行“count++;”语句。当到了10秒后超时的时候,再显示这个count值。程序所做的只有这么多。
2025-01-10 23:56:55
1267
原创 30天开发操作系统 第 12 天 -- 定时器 v1.0
要在电脑中管理定时器,只需对PIT进行设定就可以了。PIT是“ProgrammableInterval Timer的缩写,翻译过来就是“可编程的间隔型定时器”。我们可以通过设定PIT,让定时器每隔多少秒就产生一次中断。因为在电脑中PIT连接着IRQ(imteruptrequest,参考第6天)的0号,所以只要设定了PIT就可以设定IRQ0的中断间隔。……在旧机种上PIT是作为一个独立的芯片安装在主板上的,
2025-01-07 23:54:31
2937
原创 30天开发操作系统 第 11 天 -- 制作窗口
我们现在做出来的图层构架,已经完全可以完成窗口的叠加处理了,所以下面我们就来尝试一下制作窗口吧。其实方法很简单,就像前面制作背景和鼠标那样,只要先准备一张图层,然后在图层缓冲区内描绘一个貌似窗口的图就可以了。
2025-01-02 23:08:52
1329
原创 30天开发操作系统 第 10 天 -- 叠加处理
为了以后使用起来更加方便,我们还是把这些内存管理函数再整理一下。memman_alloc和memman_fee能够以1字节为单位进行内存管理,这种方式虽然不错,但是有一点不足--在反复进行内存分配和内存释放之后,内存中就会出现很多不连续的小段未使用空间,这样就会把man->fees消耗殆尽。因此,我们要编写一些总是以0x1000字节为单位进行内存分配和释放的函数,它们会把指定的内存大小按0x1000字节为单位向上舍入(roundup),而之所以要以0x1000字节为单位,是因为觉得这个数比较规整。
2024-12-31 23:42:36
1586
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人