前言
又到了学习的时候了,上次记笔记是在2017年学汇编的时候。
记录的笔记挺有用,既能加深印象,又能再需要用的时候随时翻出来查,也能证明自己确实是学过了。
话不多说,开始吧
boot
扇区512字节,结尾是0xaa55
7c00
主引导内存地址。至于为什么。
参考:
为什么主引导记录的内存地址是0x7C00?
GDT

// 一个bytes 8字节
struct Descriptor{
segment_Length = new bytes(2),
baseAddress = new bytes(3),
attr = new bytes(2),
}
实模式/保护模式
实模式寻址方式:
段寄存器 * 16 + 偏移( 16 bit )
保护模式寻址:
selector:偏移
selector = 指向GDTde偏移->从GDT中找到32位基地址
实模式到保护模式
- 准备GDT
- 用lgdt加载gdtr
- 打开A20
- 进入保护模式
LDT
和GDT一样,不过一个是全局一个是局部。只不过selector的TI位置必须设置为1
使用lldt加载
什么是保护模式?保护在哪?
每个段地址被gdt表限制,不能超出访问
每个段的作用也在gdt表中明确指明
门
层级跃迁使用,和LDT,GDT一样都是个结构体
调用门

调用方式:call 调用门,调用门结构体储存选择子,和偏移,最后调转的的地址是选择子中的基地址加上偏移。
对于call和jmp指令,有着不同的优先级检查规则的:
对call来说:当前CPL<=调用门描述符DPL,RPL<=调用门描述符DPL,当前CPL>=目的代码段描述符DPL;
对jmp来说:除了跟call的“当前CPL<=调用门描述符DPL,RPL<=调用门描述符DPL”一样外,如果目的代码段的一致的话,CPL>=目的代码段的DPL,而如果目的代码段是非一致的话,CPL=目的代码段的DPL。
另外,只有call指令可以将代码通过调用门转移到特权级更高的非一致性代码之中。对于非一致性代码的成功转移,CPL被目的代码的DPL刷新,会引起堆栈切换;对于一致性代码,不会刷新,也不会切换。
调用门的作用是,让一个代码段中的过程被不同特权级的程序访问。通常用于低特权级代码来访问高特权级的代码段。
写在开头
这个博客于其说是博客。。不如说更像OneNote之类的东西了呀,下次弄个离线加个搜索就真的成Note了2333,或者哪天自己心情好写个客户端emm正好可以练手C#
而且大部分的博文,与其说是博文,不如说是手账比较好。毕竟基本都线性更新的。同时也因为博客的不相关性,导致我忘记了之前挖的好多坑。。。看来确实得改一改了。不过在这里之前,我想起了之前好多个文章里都有类似的挖坑宣言,但是似乎好像什么都忘了hhhhh。
不过说到底还是因为利益驱动不够。看来人不能太勤奋。太勤奋的后果就是能把一些好点子给咕了,只要不影响原有功能情况下基本都懒得动他hhhh,这到底是勤奋还是怠惰呢?还是说更新之后的效果和不更新的付出所得不成正比呢emmmm
好吧脑子有点乱,不说这些了。
高三过去了,因为艺考+高考双重打击,让我之前学的ML都忘得差不多了。现在才记起来,准备试着捡起来。我也不知道我能坚持多久,因为我这个专业木有高数。真希望去计算机相关的专业啊。
顺带说下元旦快乐。这也是期末考之前最后快乐的时光了。
期末考要背的东西好多emmm,专业考试倒是完全不方。主要就是讨厌背啊emmmmm。算了,咕咕咕,先研究一波ML先。
本期内容束博主才学浅陋的一点自我总结,如果是随手翻到此博客的朋友们请酌情观看或者阅读,因为没有认真里结果,所以可能会有一些或者许多错误,还望大家多多包涵/指正,感谢大家。
以下是纯概念性理解。
我的理解
监督性学习
首先是需要一定量的数据,用来“教”程序,之后使用不同的特征提取算法,用得出的结果去和那些教来的数据比对。
发现不对,利用梯度下降法,来微调W和basis,也就是跳权重。之后再去计算,和最后的数据去比对,这也就是跑了一次训练。
就这样一直跑下去,直到最后跑出来的数据无限接近于得出的数据。那么这个网络就训练成功了(?)
emmmm就这么简单吗?还是说我理解错了emmmm。
作用范围
两种,一种是用来预测,一种是用来分类。
比方说是f(y) = ax + bx +c ,运用第一种,就能算处无限接近于a,b还有c这几个参数。这样,也就可以预测出f(y)这个函数。
还有一种是,在一组向量空间中,分布着不同的区域,每个区域代表一个分类。
先假设f(y)已经训练完成。
把y当作特征输入,得出不同的结果,然后对比这个数据在向量空间的所处位置,得出一个所选分类。
大多数的数字识别基本都是这样子的。
其中的问题
听说梯度下降那边可能会有很多解法,但是我看书里好像说不能一直是全局最优解,否则会有啥问题来着的?这个记不清了
非监督性学习
这个真的忘了,待我学习一波。。。
线性相关,线性不相关,线性不可分
线性相关主要就是一个激励值(激励函数请看下面)相关问题。类似于Y随着X改变而改变,类似于一个一次函数。
线性不相关主要是因为资源问题而考虑,X和Y所代表的激励不可能无限大下去。会随着某些因素而导致速率变慢甚至停止。一般都是一些特殊的数学函数,常见的鄙俗sigmod等等。
线性不可分大体就是让你一层神经网络区分不了,那么再多套几层的意思咯。(?)
应该吧。等我复习到了的时候再说XD
误差反向传递
这个也忘了。。
激励函数
激励函数的作用就是,更具传入不同的东西,调整当前得到的权重。
比如你目的是区分美女,那么关于是否是妹子的特征被传到这层神经网络时候,会更具激励函数,来瞬间提高/降低所得出来的值并且传到下一层。
如果按照向量空间所代表的分布来看的话,可以想象你最后结果所在的位置,因为这个激励函数结果的暴增/减,而更靠近/远离美女所处的向量空间。
当然区分这些肯定不只一层解决的事。需要很多层的共同努力,比方说处理脸部的层呀,身材的层呀等等。。所以对于激励函数的选择就很重要啦。
哎好后悔书都在家里。
未完待续
2017-07-23 00:08
直接提供图片算了,简单粗暴

2017-07-21 23:15
重大更新,因为不考虑ons引擎,只考虑自己的了,所以得先设计语法,明天zai'shuo
结构如下:
PY后端:
- manage.py 用户处理websocket事件
- resolve.py 用于处理引擎
前端就是基础三件套。
目前支持语法
["mov","goto","dwave","bgm","bgmstop","bg","if","SEL","end","fin","gosub"]
可识别语法:
["mov","goto","dwave","print","bgm","lsp","bgmstop","wait","textclear","bg","if","SEL","end","fin","gosub","br"]
通信通过WebSocket通信。
过程:
前端->{dat:游戏脚本路径或者特殊标号}
->后端:
- 是否第一次运行? 找到第一个游戏段,解析;解析段地址为前端给予的地址
- 解析
-返回成指定数据格式`
->前端:
- 数据格式拆包
- 显示给用户
- 遇到SEL/END ->发送下一个章节的代码段(代码段在SEL语句里有)->跳转到最上方
后端解析方式:
更具前端返回,判断是否有cs?
有:读取指定的cs段 ; 没有:从第一个cs段开始解析
读入cs端,逐行解析
两个for迭代循环命令,判断语句是否带有上面的可识别命令
遇到执行命令,append到指定的列表中去(bgm,bg,voice等等),并记录文字列表的长度(好让前端知道什么时候显示
如果全都不是,那么认为为文字(文字之前没有任何命令,print什么的都没有,就直接显示)
append到文字列表
持续到逐行全部解析结束
打包成指定数据格式
通过websocket发送给前端
指定数据格式结构:
一段json:
{
"str":[文本i,文本j....文本n],
"flag":{用户所包含的文本地址},(这个参数请下一次请求时也请原封不动的传递上来)
"bgm":{int:资源地址,int:'资源地址'},
"voice":{int:'资源地址',int:'资源地址'},
"Dwave":{同上},
"bg":{同上},
"Next":下一章节标题名,
}
dict格式{int:资源地址},其中int和list 显示文本一一对应。
后期扩展(如特效等等):延长json长度,后面加入更多的特效指令和list对应。
其中,Next一般是SEL语句或者是直接下一章的章节名,如果是SEL语句请更具用户的选择来返回对应的Next。
完整流程:
第一次运行游戏请用ws传递json {"dat":游戏脚本}
同时,ws端将会返回一大段的
{
"str":[文本i,文本j....文本n],
"flag":{用户所包含的文本地址},(这个参数请下一次请求时也请原封不动的传递上来)
"bgm":{i:资源地址,j:'资源地址'},
"voice":{k:'资源地址',n:'资源地址'}, (ijkl均为int,对应着文本i,j,k,l..)
"Dwave":{同上},
"bg":{同上},
"Next":下一章节标题名, (这个也请原封不动的传递上来)
}
不同的是Next有时候并不会返回章节名,也许会返回选择支,例如
SEL "敲门","今天这先这样吧","*CA_0","*CA_1"
请更具用户的选择修改给函数传递的cs内容。当然,也有会其他类型的文本
error 说明脚本编写错误,请直接停止游戏,因为脚本无法继续运行下去了
GameEnd/End/Fin 说明已经通关到达结局
传递消息
第二次运行时请传递json {"flag":上一次返回的,"cs",也是上一次返回的} 均为上次返回的值
注意cs可能更具SEL的选择支进行改变
返回的内容同上
2017/5/30更新
程序项目新地址:https://git.oschina.net/gaoshi_team/galgame_server
如你们所见基本没怎么动。
把那个很蠢的函数判断方法换了,用了你个略魔幻的方法
