日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

计算机操作系统第三章知识点,深入理解计算机操作系统第三章家庭作业

發布時間:2023/12/19 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机操作系统第三章知识点,深入理解计算机操作系统第三章家庭作业 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3.58

y=y-z;

x=x*y;

return x ^ (y<<63>>63);

3.59

無符號64位,ux 和 uy

有符號64位,x 和 y

設 x 和 ux 具有相同的位,y 和 uy 具有相同的位,

ux = x + Sx*2^64

ux = y + Sy*2^64

ux * uy = (x + Sx * 2^64) * (y + Sy * 2^64)

ux * uy = x*y + (Sx*y + Sy*x)*2^64 + Sx*Sy*2^128

ux * uy = x*y + (Sx*y + Sy*x)*2^64

x*y = ux * uy - (Sx*y + Sy*x)*2^64

movq %rdx, %rax rax 存有 y

cqto rdx 存有 -Sy (存的位要么是全 1,要么全 0)

movq %rsi, %rcx rcx 存有 x

sarq $63, %rcx rcx 存有 -Sx

imulq %rax, %rcx rcx 存有 -Sx * y (注意,imul 不分有符號乘法還是無符號乘法,只保留低 64 位,這邊不可能溢出,因為 Sx 要么 1 要么 0)

imulq %rsi, %rdx rdx 存有 -Sy * x

addq %rdx, %rcx rcx 存有 -Sx*y + -Sy*x

mulq %rsi rax 存有 ux * uy 低 64 位, rdx 存有積的高 64 位

addq %rcx, %rdx rdx 存有 (ux * uy)/2^64 - (Sx*y + Sy*x)

movq %rax, (%rdi) 低 64 位

movq %rdx, 8(%rdi) 高 64 位

ret

3.60

long loop(long x, int n) {

long result = 0;

long mask;

for (mask = 1; mask != 0; mask = mask << n) {

result |= x & mask;

}

return result;

}

3.61

long cread(long *xp) {

return (xp ? *xp : 0);

}

long cread_alt(long *xp) {

return (!xp ? 0 : *xp);

}

// 現在的編譯器比較智能,已經不會像書中一樣編譯這段代碼了。

3.62

typedef enum {

MODE_A, MODE_B, MODE_C, MODE_D, MODE_E

} mode_t;

long switch3(long *p1, long *p2, mode_t action) {

long result = 0;

switch (action) {

case MODE_A:

result = *p2;

*p2 = *p1;

break;

case MODE_B:

result = *p1 + *p2;

*p1 = result;

break;

case MODE_C:

*p1 = 59;

result = *p2;

break;

case MODE_D:

*p1 = *p2;

case MODE_E:

result = 27;

break;

default:

result = 12;

break;

}

return result;

}

3.63

long switch_prob(long x, long n) {

long result = x;

switch (n) {

case 60:

case 62:

result = 8 * x;

break;

case 63:

result = x >> 3;

break;

case 64:

result = x * 15;

x = result;

case 65:

x = x * x;

case 61:

default:

result = 75 + x;

}

return result;

}

3.64

&D[i][j][k] = D + (S*T*i + T*j + k) * L

R = 7

S = 5

T = 13

3.65

A.

&A[i][j] in %rdx

B.

&A[j][i] in %rax

C.

M = 15

3.66

NR(n) == 3*n

NC(n) == n*4 + 1

3.67

A.

104 +------------------+

| |

| |

| |

| |

| |

| |

| |

| |

64 +------------------+

| |

| |

| |

| |

| |

| |

32 +------------------+

| z |

24 +------------------+

| &z |

16 +------------------+

| y |

8 +------------------+

| x |

0 +------------------+

B.

eval 傳了一個新地址給 process ,新地址是 %rsp+64

C.

process 通過棧指針來訪問 s,而不是通過 %rdi

D.

process 將參數 %rsp+64 設置為起點,將 r 的成員設置進來,并在最后返回 r 的指針。

E.

104 +------------------+

| |

| |

| |

| |

| |

| |

88 +------------------+

| z |

80 +------------------+

| x |

72 +------------------+

| y |

64 +------------------+

| | \

| | -- %rax(process pass out)

| |

| |

| |

| |

32 +------------------+

| z |

24 +------------------+

| &z |

16 +------------------+

| y |

8 +------------------+

| x |

0 +------------------+

| |

-8 +------------------+

F.

調用者設置一個地址給被調用者作為起點存儲成員數據,被調用者最后返回這個地址。

3.68

提示:考慮對齊產生的空隙,所以最后產生的一個范圍

4 < B <= 8

6 < A <= 10

44 < A*B <= 46

得:A=9, B=5

3.69

A.

CNT = 7

B.

typedef struct {

long idx,

long x[4]

} a_struct;

3.70

A.

0 8 0 8

B.

16

C.

void proc(union ele *up) {

up->e2.x = *(up->e2.next->e1.p) - up->e2.next->e1.y;

}

3.71

#include

#include

#define BUF_SIZE 12

void good_echo(void) {

char buf[BUF_SIZE];

while (1) {

/* function fgets is interesting */

char *p = fgets(buf, BUF_SIZE, stdin);

if (p == NULL) {

break;

}

printf("%s", p);

}

return;

}

int main(int argc, char *argv[]) {

good_echo();

return 0;

}

3.72

A.

n 是奇數時:

s_2 = s_1 - (n * 8 + 24)

n 是偶數時:

s_2 = s_1 - (n * 8 + 16) s

B.

p 是 16 位的倍數

C.

--

e1

n

s1

最小

1

偶數

n%16==1

最大

24

奇數

n%16==0

D.

p 按 16 字節對齊,

s2 十六的倍數,并且至少有 8*n 的空間。

3.73

#include

#include

typedef enum {

NEG, ZERO, POS, OTHER

} range_t;

range_t find_range(float x) {

__asm__(

"vxorps %xmm1, %xmm1, %xmm1\n\t"

"vucomiss %xmm1, %xmm0\n\t"

"jp .P\n\t"

"ja .A\n\t"

"jb .B\n\t"

"je .E\n\t"

".A:\n\t"

"movl $2, %eax\n\t"

"ret\n\t"

".B:\n\t"

"movl $0, %eax\n\t"

"ret\n\t"

".E:\n\t"

"movl $1, %eax\n\t"

"ret\n\t"

".P:\n\t"

"movl $3, %eax\n\t"

"ret\n\t"

);

}

int main(int argc, char *argv[]) {

range_t n = NEG, z = ZERO, p = POS, o = OTHER;

assert(o == find_range(0.0 / 0.0));

assert(n == find_range(-2.3));

assert(z == find_range(0.0));

assert(p == find_range(3.33));

return 0;

}

3.74

#include

#include

typedef enum {

NEG, ZERO, POS, OTHER

} range_t;

range_t find_range(float x) {

__asm__(

"vxorps %xmm1, %xmm1, %xmm1\n\t"

"movq $1, %rax\n\t"

"movq $2, %r8\n\t"

"movq $0, %r9\n\t"

"movq $3, %r10\n\t"

"vucomiss %xmm1, %xmm0\n\t"

"cmovaq %r8, %rax\n\t"

"cmovbq %r9, %rax\n\t"

"cmovpq %r10, %rax\n\t"

);

}

int main(int argc, char *argv[]) {

range_t n = NEG, z = ZERO, p = POS, o = OTHER;

assert(o == find_range(0.0 / 0.0));

assert(n == find_range(-2.3));

assert(z == find_range(0.0));

assert(p == find_range(3.33));

return 0;

}

總結

以上是生活随笔為你收集整理的计算机操作系统第三章知识点,深入理解计算机操作系统第三章家庭作业的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。