2023年10月
计算机组成原理实验2
计算机组成原理2
更好的浏览:https://type.dayiyi.top/index.php/archives/219/
1.利用Logisim软件设计一个1位加法器
加法器是数字系统中的基本逻辑器件,减法器和硬件乘法器都可由加法器来构成。
全加器,全加器是实现两个一位二进制数及低位来的进位数相加(即将三个二进制数相加),求得和数及向高位进位的逻辑电路。所以全加器有三个输入端(A,B,C)和两个输出端S,Cout)。
设计思路:一个全加器可以用两个1位半加器和或门组成。
1.1半加器:
真值表
| A | B | Sum (S) | Carry (Cout) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
- 和(Sum,): S=A⊕B。
- 进位(Carry, Cout): C = AB

也可以直接生成

全加器:
输入:A、B、C
输出:S、Cout
同样的,还是先写真值表
| A | B | C | Sum (S) | Carry (Cout) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
然后直接生成就可以啦


逻辑关系式:
和(Sum, S):S=A⊕B⊕C
进位(Carry, Cout): Cout=AB+BC+AC
结果与加法器一样(这个加法器可以调位宽):

2、利用1位全加器设计4位加法器
改下标签:cin和cout

魔改电路位置,直接画就行:





要命:

正常工作了

3、可控加减电路的设计(利用上节课数据选择器电路)
3.1 生成一个数字选择器
真值表:
| S | D0 | D1 | Y |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 |
逻辑表达式:$Y=S⋅D_1+S⋅D_0$




3.2 画一下

3.3 4位全加器

3.4 画
不兼容的位宽诶

3.5 生成一个4位2路选择器
- $( Y1 = SEL \cdot D21 + \overline{SEL} \cdot D11 )$
- $( Y2 = SEL \cdot D22 + \overline{SEL} \cdot D12 )$
- $( Y3 = SEL \cdot D23 + \overline{SEL} \cdot D13 )$
- $( Y4 = SEL \cdot D24 + \overline{SEL} \cdot D14 )$
输入:
- $D_{11}$
- $D_{12}$
- $D_{13}$
- $D_{14}$
- $D_{22}$
- $D_{23}$
- $D_{24}$
- $D_{25}$
- $S_{el}$
输出:
- $Y_{1}$
- $Y_{2}$
- $Y_{3}$
- $Y_{4}$




真值表:

要命
对一下:
然后把这里删掉:中间多的那几个引脚删掉


这个样子:
出来啦



4、在Logisim中应用运算器部件设计
99+55

99-55

21*6

5、main电路中调用子电路实现特定四则运算
Python 3.12.0 (tags/v3.12.0:0fb18b0, Oct 2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> (100+50-15)*2
270



文件:

https://pic.icee.top/blog/dl_files/实验2_文件_49688a97-1eae-40b9-9d4a-8f5fa1762cfe.rar
云与虚拟化——实验4 构建镜像
云与虚拟化——实验4 构建镜像
实验4-1 利用Docker commit构建带sshd服务自定义镜像
1.1 拉取镜像,并安装ssh,生成秘钥生成镜像
# 拉取镜像
docker pull centos:7
# 启动一个容器
docker run -itd --name centos_sshd centos:7 bash
# 在容器里启动bash,并且显示出来
docker exec -it centos_sshd bash
进入容器:
#切换镜像源到cernet
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.cernet.edu.cn/centos|g' \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo
#安装sshd,以下在容器里进行
yum -y install openssh-server net-tools
mkdir -pv /var/run/sshd
#启动脚本
echo "/usr/sbin/sshd -D" > /auto_sshd.sh
#查看文件
cat /auto_sshd.sh
#给执行权限
chmod +x /auto_sshd.sh
#修改密码:
echo "root:123456" | chpasswd
#生成秘钥:一路回车哦
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

再生成俩秘钥
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
#退出容器
exit
构建镜像:
docker commit centos_sshd centos7_sshd:1.0
当前的containerd 目标镜像:TAG信息
docker images
1.2测试容器是否可用:
docker run -itd --name centos_7.0-1 centos7_sshd:1.0
docker ps成功

测试SSH是否可用
# containerID 执行的软体
docker exec -it c43a bash
# 查看IP
ifconfig
# CTRL + P +Q 挂起退出或者直接ctrl+X
#上面两行也可以直接执行:
docker exec -it centos_7.0-1 ifconfig
#启动SSH服务
docker exec -itd centos_7.0-1 八省/auto_sshd.sh

1.3连接SSH
#这里填你的IP
ssh root@172.17.0.6
#密码:123456
1.4查看镜像/Container信息
docker inspect centos7_sshd:1.0
2 帮助:
# 删除全部容器
docker rm -f $(docker ps -aq)
# force -a全部 -q只显示id
# SSH无法连接删除这个文件:
rm -rf ./.ssh/known_hosts实验4-2 利用Dockerfile构建带sshd服务的自定义镜像
3.1Dockerfile 构建centos7_sshd:1.0
新建个目录:
mkdir -pv /opt/centos_sshd
cd /opt/centos_sshd
vi Dockerfile把这个文件塞进去
# 使用CERNET镜像源的CentOS 7作为基础镜像
FROM centos:7
MAINTAINER dayi
# 切换镜像源到CERNET
RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.cernet.edu.cn/centos|g' \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo
# 安装必要的软件包
RUN yum -y install openssh-server net-tools && \
mkdir -pv /var/run/sshd && \
echo "/usr/sbin/sshd -D && nohup" > /auto_sshd.sh && \
chmod +x /auto_sshd.sh && \
echo "root:123456" | chpasswd && \
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && \
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
# 暴露SSH端口
EXPOSE 22
# 启动SSH服务
CMD ["bash","/auto_sshd.sh"]
3.2构建镜像
构建!
cd /opt/centos_sshd
#构建
docker build -t centos7_sshd:2.0 .
#查看镜像
docker images
3.3 启动!
docker run -itd --name centos7_ssh_2 centos7_sshd:2.0
docker exec -it centos7_ssh_2 ifconfig
连接试试:
ssh root@172.17.0.2
123456
3.4 启动失败
# 删除全部容器
docker rm -f $(docker ps -aq)
# force -a全部 -q只显示id
# SSH无法连接删除这个文件:
rm -rf ./.ssh/known_hosts 协议分析——实验七 利用Wireshark分析ICMP
协议分析——实验七 利用Wireshark分析ICMP
地址:
软件准备
似乎不用准备什么东东,可以开机的电脑和系统就可以啦
先看看实验报告:
在实验报告中回答下面问题:
(1)查看ICMP echo 分组,是否这个分组和前面使用 ping命令的ICMP echo 一样?
(2)查看ICMP错误分组,它比ICMP echo 分组包括的信息多。ICMP错误分组比ICMP echo 分组多包含的信息有哪些?
(3)尝试使用ping –f命令产生icmp报文,并观察分析。
1.设计能捕获多种ICMP报文的实验步骤。
2.记录并分析截获的数据包。
这样的话就可以啦
照着实验步骤来就好。
推荐一个小软件:Best Trace 下载地址:https://www.ipip.net/product/client.html#besttrace

1、ping 和 ICMP
利用Ping程序产生ICMP分组。Ping向因特网中的某个特定主机发送特殊的探测报文并等待表明主机在线的回复。具体做法:
(1)打开Windows命令提示符窗口(Windows Command Prompt)。
(2)启动Wireshark 分组嗅探器,在过滤显示窗口(filter display window)中输入icmp,开始Wireshark 分组俘获。
(3)输入“ping –n 10 hostname” 。其中“-n 10”指明应返回10条ping信息。
(4)当ping程序终止时,停止Wireshark分组俘获。
这个感觉照做就好

打开软体哦,然后双击捕获的适配器。
输入ICMP

然后在cmd里面ping就好
ping -n 10 a.dayiyi.top


大概也就这个样子
咱集群内网包太多就不放文件了(几秒14M的流量),有用的不到20K。、
TYPE 0 CODE8
echo req 分组

TYPE0 CODE 0
echo reply分组


2、ICMP和Traceroute
(1) 启动Window 命令提示符窗口
(2) 启动Wireshark分组嗅探器,开始分组俘获。
(3) Tracert命令在c:\windows\system32下,所以在MS-DOS 命令提示行或者输入“tracert hostname” or “c:\windows\system32\tracert hostname” (注意在Windows 下, 命令是 “tracert” 而不是“traceroute”。)如图4所示:
(4)当Traceroute 程序终止时,停止分组俘获。
推荐使用联通的流量或者宽带,其他的网络结果不明显
准备命令:
tracert a.dayiyi.top
开始捕获
这个过程比较慢

你会发现TTL会越来越长


BEST TRACE
也可以试试BEST trace

同样的,直接追踪就好

回答问题
(1) 查看ICMP echo 分组,是否这个分组和前面使用 ping命令的ICMP echo 一样?
可以看到这里的分组跟之前有点区别了。

REQ会出现无回应的情况,也就是wireshark没有找到相应的回应。

同时也会出现TTL exceeded的情况

(2) 查看ICMP错误分组,它比ICMP echo 分组包括的信息多。ICMP错误分组比ICMP echo 分组多包含的信息有哪些?
包含了当前节点的IP信息,也就是当前路由的IP信息,通过一定的计算可以计算出相应的访问时间。
(3)尝试使用ping –f命令产生icmp报文,并观察分析。
-f 在数据包中设置“不分段”标记(仅适用于 IPv4)。

如果拉大:

3、实验报告
1.设计能捕获多种ICMP报文的实验步骤。
除了wireshark,还可以直接在网关上干
Linux下:
tcpdump host 39.105.181.66 -w cap.cap



2.记录并分析截获的数据包。

正常的ICMP啦

回应

文件下载

计算机组成原理1——认识logisim软件、门电路逻辑功能测试
计算机组成原理1——认识logisim软件、门电路逻辑功能测试
实验名称
认识logisim软件、门电路逻辑功能测试
实验目的
熟悉Logisim仿真软件的使用环境。
了解基本逻辑门的使用:与、或、非和Logisim的基本操作。
实验原理
Logisim是一种用于设计和模拟数字逻辑电路的教育工具。凭借其简单的工具栏界面和构建它们时的电路仿真,它非常简单,有助于学习与逻辑电路相关的最基本概念。由于能够从较小的子电路构建更大的电路,并通过鼠标拖动来绘制电线束,因此可以使用Logisim来设计和仿真用于相关课程的教学目的。
实验材料
Logisim软件
实验过程
打开附logisim使用手册,了解软件界面和功能。
实验1 门电路绘制
打开附logisim使用手册,了解软件界面和功能。
任务1:依照使用手册手工绘制电路图如下:(改变输入查看输出结果,查看真值表)
画一下:

查看真值表:

查看表达式:

电路为异或电路
增加电路:

表达式:

真值表:

任务2——在logisim的管理窗口完成2-4译码器电路图的绘制,并分别用自动仿真、和单步仿真验证其逻辑功能
画一个:

查看真值表:

查看表达式:

逻辑功能(点点,也正常)

3-8译码器:

任务3.新建电路,修改其真值表,与2-4为译码器一样,然后建立电路,生成逻辑门电路
生成一个2-4译码器:


输出:

真值表改成这个:

查看表达式:


可以看到已经正常建立:
2-4译码器

2-4 译码器2输入

2-4译码器与非:

3-8 译码器
一样的


改下真值表:

生成1:

生成2(2逻辑门):

生成3(与非门):

生成4:(与非二逻辑门)

逻辑正常:

半加器:

全加器:



任务4:二路选择器(1位)
输入端:X0, X1, Sel
输出端:Out
功能描述:当Sel端为0时,输出X0,当Sel端为1时,输出X1
建立电路并分析逻辑

表达式:

真值表:

逻辑1:

逻辑2:

OUT = x0 ~SEL + X1 X1 SEL
OUT = x0 ~SEL + X1 SEL
任务5:生成电路
给定逻辑表达式:Out1=A xor B+B xor C+ A xor C
Out2=A&B+B&C+C&A
直接生成就好:


输入:A xor B+B xor C + A xor C

输入:A B + A C + B C


文件下载

https://p.dabbit.net/blog/dl_files/实验1-文件_6ec3be49-9f94-4c3f-8efb-a6f5fe3f55ba.rar