1 test-and-set详解//注意 test-and-set是原语操作,3条指令必须一次执行完毕boolean test-and-set(*lock){ boolean old=*lock; *lock=true; return old;}do{ while(test-and-set(*lock)){ //你没有看错,里面啥也没有...
SimIt-ARM-3.0 给予命令行ARM
指令
模拟器,短小精悍,是研究ARM处理器的好工具,该模拟器既可以运行用户级别的ELF程序,又可以模拟运行Linux操作系统;提供了简单易用的调试命令,可以逐条跟踪
指令
的执行。
SimIt-ARM-3.0-gk-20150902.tar.bz2 HowTo
0.what is SimIt-ARM-3.0
SimIt-ARM 3.0 is an instruction-set simulator that runs both system-level and user-level ARM programs,
for more about it please read user's guide file.
1.how to build
tar jxvf SimIt-ARM-3.0-gk-20150902.tar.bz2
cd SimIt-ARM-3.0-gk
./configure
make install
After these steps, the ./build/bindirectory contains the following programs:
ema An ARM interpreter.
To test the installation was successful type
./build/bin/ema test/wc configure
modifiy PATH environment variable:
PATH=$PATH:$HOME/SimIt-ARM-3.0-gk/build/bin ; export PATH
2. how to use
2.1 run user-level ARM programs
[root@ORA9 SimIt-ARM-3.0-gk]# cd gcc-asm
[root@ORA9 gcc-asm]# more hello.c
* hello.c
* Tue Sep 8 10:13:40 CST 2015
int main()
printf("hello world\n");
__asm("mov r0,#2\n\t" "swi 0x1\n\t"); // syscall: exit(2);
[root@ORA9 gcc-asm]# arm-linux-gcc -v
Reading specs from /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/specs
Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-glibc-2.3.2 --with-float=soft --with-headers=/opt/crosstool/arm-linux/gcc-3.4.1-glibc-2.3.2/arm-linux/include --with-local-prefix=/opt/crosstool/arm-linux/gcc-3.4.1-glibc-2.3.2/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.1
[root@ORA9 gcc-asm]# arm-linux-gcc hello.c -o hello -static
[root@ORA9 gcc-asm]# ls -l hello*
-rwxr-xr-x 1 root root 520775 Sep 8 10:18 hello
-rw-r--r-- 1 root root 160 Sep 8 10:15 hello.c
[root@ORA9 gcc-asm]# file hello
hello: ELF 32-bit LSB executable, ARM, vers
每个并发的进程都有一个代码段,被叫做临界区,这个代码段也是临界区可能会改变并发进程的公告资源数据,更新数据,写入文件等操作;
在并发的进程
中
,当有一个进程正在执行临界区的代码时候,其他并发的进程是不可以被允许去执行临界区的代码的,换句话说:两个进程是不可以不可能同时执行临界区的内容;
总的来说:临界区问题就是设计一种协议:这种协议它可以保证进程之间相互协作;
进程进入临界区协议
当我们一个进程需要进入临界区时候,需要获取进入临界区的许可,当我们离开临界区时候,需要归还临界区的许可;
定义和伪代码
TestAndSet(TS
指令
和TSL
指令
)用
硬件
来
实现
,booleanTestAndSet()的过程一起呵成,属于原子操作。
booleanTestAndSet (boolean *lock){
boolean old = *lock;
*lock= TRUE;
return old;
while(TestAndSet(&lock));
criticalsection;//临界区
lock= FALSE;
remaindersection;//剩余区
TS
指令
1、技术背景
书
中
原文:
通过加锁的方式来解决临界区的问题,许多现代系统提供特殊的
硬件
指令
,用于检测和修改字的内容,或者用于原子地交换两个字(作为不可
中
断地
指令
)。我们可以采用这些特殊的
指令
,相对简单地解决临界区问题,在这里通过
指令
test_and_set()和compare_and_
swap
()抽象了这些
指令
背后地主要概念。
2、问题分析
2.1
指令
test_and_set()可以按照如下代码来定义:
这一
指令
的
原子库为细粒度的原子操作提供组件,允许无锁并发编程。涉及同一对象的每个原子操作,相对于任何其他原子操作是不可分的。原子对象不具有数据竞争(data race)。原子类型对象的主要特点就是从不同线程访问不会导致数据竞争。因此从不同线程访问某个原子对象是良性(well-defined)行为,而通常对于非原子类型而言,并发访问某个对象(如果不做任何
同步
操作)会导致未定义(undifined)行为发生。
我一直都对位运算感兴趣,但凡最小的bit都能干一件大事,比如最多见的“存放一种状态”。
果然瘦子都比胖子灵活,就连计算机也没有例外,位运算巧妙的用着计算机的与门、或门、非门和异或等简单操作,就将空间开销拉到了最低。
碰巧正研究着kernel的网络协议栈,看到了
中
间也参杂着不少的位运算函数,所以仗着捣鼓TCP的机会,学习下内核的一些位运算
机制
。一是学到点自己感兴趣的东西,二是以后再遇到,自然可以相视一笑。
此外,内核的位运算
实现
大多都是原子操作,这让这些位运算函数被广泛用于内核的各个地方。
写到这,回想下,自
CentOS 是一种流行的 Linux 操作系统,而
swap
是指用于虚拟内存的一种
机制
。在 CentOS
中
,可以配置和管理
swap
空间来提高系统的性能和稳定性。
要为 CentOS 配置
swap
空间,可以按照以下步骤进行操作:
1. 确认系统是否已经存在
swap
分区:运行命令 `sudo
swap
on --show`,如果没有任何输出,则表示系统没有配置
swap
分区。
2. 创建一个用于
swap
的文件:运行命令 `sudo fallocate -l <大小> /
swap
file`,其
中
`<大小>` 是你希望设置的
swap
文件的大小(例如:1G、2G 等)。请注意,
swap
文件的大小应根据你的实际需求来确定。
3. 为
swap
文件设置合适的权限:运行命令 `sudo chmod 600 /
swap
file`。
4. 格式化
swap
文件:运行命令 `sudo mk
swap
/
swap
file`。
5. 启用
swap
文件:运行命令 `sudo
swap
on /
swap
file`。
6. 永久性地启用
swap
文件:将以下行添加到 `/etc/fstab` 文件
中
,以便在系统重新启动时自动启用
swap
文件:
/
swap
file none
swap
sw 0 0
7. 最后,运行命令 `sudo
swap
on --show` 验证
swap
文件是否已成功启用。
请注意,配置
swap
空间可能会占用磁盘空间,因此请确保你的磁盘有足够的可用空间。此外,还应根据你的系统需求和
硬件
配置来确定
swap
空间的大小。
.编程:编写一个Point类,有x、y两个属性。编写一个PointDemo类,并提供一个distance(Point p1,Point p2)方法用于计算两点之间的距离,实例化两个具体的Point对象
12241
L1-017 到底有多二 (15 分) 一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-131422233
10925