Hackpads are smart collaborative documents. .

stu9458@gmail.com

881 days ago
Unfiled. Edited by coldnew , stu9458@gmail.com , Jie-Han Chen 881 days ago
(2) 設計一個演算法,計算 N! 有幾個尾隨的 0
coldnew
  • 補一個偏數學的問題,這是我以前寫 Project Euler 寫到的: 請找出1000000000000!末5位不為0的值
(3) 給定一個介於 0 和 1 之間的實數,如 0.32,其型態為 double,印出其二進位表示法。倘若無法精確用 32位以內的二進位表示,則顯示 ERROR
Jie-Han C
  • 想要請問題目的意思,印出二進位表示法。我印象中像是: 0.5 的二進位表示是 0.1
  • 後面不能以 32 位以內的二進位,如果我理解的沒錯的話,是指小數點後有超過 31 個 0 or 1
  • 也就是十進位不能以2進位整除的方式。今天在台上答題的時候感到疑惑的是這題目後面的 
  • 32位 應該和 32 位元(bit) 是沒關係的吧 !?  如果ˋ是沒關係似乎就不用管 IEEE 754 單純是數學計算。如果是 32位"元" 的話,感覺上就是在問電腦中儲存的方式。
  
 
  1. 無欲則剛 (There is no career goal. - 沒有職業目標)
stu9458@gmail.com
  • 不懂這句話的意思,不設立程序員的工作宗旨和憧憬,不覺得有點盲目?
  1. 謹言慎行 (Shut up. - 住口)
  1. 明心見性 (Mindfulness. Care. Awareness. - 正念、留心、覺察)
  1. 明哲保身 (There is no Boss. - 沒有老闆)
  1. 玩物明志 (Do something else)
  1. 恬淡寡欲 (There is nothing special.)
 
845 days ago
Unfiled. Edited by coldnew , stu9458@gmail.com 845 days ago
因為我們只支援 a-zA-Z, 也就是只使用 26*2 = 52 個空間, 1byte 可以存放 4.9 個字元,因此儲存 LastName 的 16byte 就可以減少到 4byte,而像電話只需要 0-9 ,也就是 10個空間, 1byte 可以存放25.5個電話數字,因此整個 struct 結構就可以縮減如下
stu9458@gmail.com
  • 不好意思,想要請教:
  • 所以你這方式是利用struck來儲存暫時的資料(因為該壓縮的方式是利用空間與變化總數來壓縮)搭配數學計算,而總資料存放在另外一個空間。藉由而計算出來的結果來對應相對的index,並以此直接快速存取總資料的資料庫。對嗎?
coldnew
  •  
 
 
 
 
這邊大多的東西都和 01-HelloWorld 一樣,所以我們只要關注那些新來的就好,因此這次我們從 context_switch.S 來開始看。不過其實從檔名也可以猜到 context_switch.S 是作啥的,我們要寫 OS,所以自然會把執行的程式切分為 user mode 和 kernel mode 兩個環境執行,所以你可以看到 context_switch.S 裡面就會存放目前的 kernel state,並切換到 user state (然後就回不來了 XD),這邊同時也是從 handler mode 切換到 thread mode 的過程 
`msr control, r0`
 
 
935 days ago
Unfiled. Edited by 林展翔 , Neal Liu , stu9458@gmail.com 935 days ago
理版本:Xeno
 
林展翔
  • 不太清楚要怎樣做這部份?是要寫一個kernel module去call Raspberry-pi的device driver嗎?
stu9458@gmail.com
  • 先確認kernel module已經掛載上去,並且用latency測試都可以跑出相對應數值後, 試著在自己的rpi上面撰寫一個仿造interrupt-intput to output的狀況, 用示波器抓出來看結果如何, 當然前提是用C語言撰寫.
  • 應該可以發現LINUX TASK and Xenomai TASK的不同結果
 
  • 事先對母體參數(如平均數、標準差、比例值等)建立合理的假設,再由樣本資料來測驗此假設是否成立,以為決策之依據的方法。在實際的生物試驗中,往往是針對欲了解或改進的方法進行檢測,比對原有或已知的方式(對照組),以確知其差異性,此時即可利用統計假設檢定方式進行。假設之成立與否,全視特定樣本統計量與母體參數之間,是否有顯著差異(significant difference)而定,所以假設檢定又稱顯著性檢定(test of significance)。
 
  • 3.顯著水準(significant level) α→指檢定顯著差異性之機率值
  • α越高,越難讓假說成立
 
                      
林展翔
  • 臨界值 (critical value)計算公式               
  • 常態性的確保
 
859 days ago
 
 
coldnew
  • `arm-linux-gnueabihf-objdump -D -s -j .rodata -j .text  a.out`
 
王信凱
  • memory未初始化時,只能看到on-chip memory(不能額外驅動)
Tse-jen C
  • Processor在通電後仍需輸入正確的clock signal才會開始啟動exception機制. (phase-lock loop circuit->generate correct clock signal)
 
  • 最後一個 bit 會被送到 carry flag,也會放到最左邊的 bit 上
Wen H
  • Barrel Shifter 可提升程式碼密度 (空間複雜度)
  • EX: 某數*3 => ADD R0, R1, R1, LSL #1 means R0=R1+(R1<<1)
  • 所以ARM的最佳化可能會對齊到 2的N次方 +1
 
  • p. 44 RTFM = Read The Funny Manual 
  • 要努力找到第一手資料,以確保資料的正確性
 
  • p. 47 看不懂 ASR 如何運作
 
Date H
  • ASR,MSB 保持不變,其他 bit 向右 shift
Wen H
  • 可以用 QEMU + GDB 進行單步執行
  • 用 objdump 去看 machine code
  • 對 compiler 可以設定參數,進行最佳化
 
  • 為什麼Lab38中 example 3 執行完會是0?
  • HINT:因為 -6 和 8 是往右位移,不是真的除2
  • 可以到Makefile中把 -O3 改成 -O0,objdump出來的結果會比較看得懂(因為關掉最佳化)
  • -O3 會在編譯階段就知道值(答案)了
  • 最佳化關掉和打開都會得到 0
 
 
coldnew
  • `movw` followed by a `movt` is a common way to load a 32-bit value into a register.
Wen H
  • 比較新的指令集才有,跟ARM版本有關(ARMv7)
Wen H
  • 一旦一個正整數距離邊界很接近時(EX:很大的值),會直接紀錄距離正整數邊界有多有遠(ARM最佳化)
  • 如果這個值確保只會動到比較低的 bit時(EX:減一個比較小的數),會拆成高位元和低位元去處理
  • 增加pipeline效率(load-store是非常耗時間的動作)
 
 
coldnew
  • 結果和最佳化參數也相關 (`-O0 -> -O3`)
Wen H
  • SSA最佳化
coldnew
  • 不同的結果和 QEMU 有關 (版本、實作方法、初始值)
  • 模擬器只保存狀態
 
 
Benchmark (回顧上週作業)
 
  1. 大數 := 大數 - 小數
 
8 != 40, 是重複上述動作: 40 - 8, 8 -> 32, 8
 
  • int findGCD(int a, int b) {
  •     while (1) {
  •         if (a > (b * 4)) {
  •             a %= b;
  •             if (a == 0) return b;
  •             if (a == 1) return 1;
  •         } else if (a >= b) {
  •             a -= b;
  •             if (a == 0) return b;
  •             if (a == 1) return 1;
  •         }
  •         if (b > (a * 4)) {
  •             b %= a;
  •             if (b == 0) return a;
  •             if (b == 1) return 1;
  •         } else if (b >= a) {
  •             b -= a;
  •             if (b == 0) return a;
  •             if (b == 1) return 1;
  •         }
  •     }
  • }
 
 
Wen H
  • 作業
Jim H Homework 1:
把這三個實做,變成 ARM 的版本
stu9458@gmail.com 可以選擇ARM assemble code (可選)
Wen H
  • 寫出一個 benchmark,去測上面程式
  • 要如何設計 benchmark
  • 要測的東西
  • 2 -> 9999 找出最大公因數
coldnew
  • 不使用 compiler 最佳化, CFLAGS 使用 `-O0`
Wen H
  • 把自己的結果放在下面(像上週一樣)
 
Homework 2
今日考試,然後證明它
重點在Lastname(16 bytes)的找到與否
  • Cache(bit) : 32*1024 (32K)
  • 32*1024 / (16*8) = 256(只能存256筆)
  • 可以最佳化成 32*1024  / 32 = 1024 筆 (hash function)
  • 可以假設 boundary 是2億,去想如何處理 PHONE_BOOK
  • Pentium 4: 512K
...
845 days ago
 
Jim H
  • 市場訊息
 
  • 2015 年第二季全球各大廠商的終端使用者智慧型手機銷售量 (單位:千支)
  • [資料來源: Gartner,2015 年 8 月;聯想數據包括 2015 年第 2 季與 2014 年第 2 季期間聯想與 Motorola 行動電話銷售量]
  • 中國是智慧型手機銷售第一的國家,2015 年第 2 季佔全球智慧型手機總銷量 30%
  • 新興亞太地區 (中國除外)、東歐與中東非洲是成長最快的地區,主要受到中國與當地廠商表現優異所帶動
  • 來自中國製造業的破壞力量,還有創新網路廠商的新型態商業模式,都對硬體毛利率沒有好處
 
  • 作業回顧
  • 輾轉相除法實做的效能分析
  • 電話簿程式的 cache miss 議題與改進方案
  • clz 查表法分析
 
Tag: CTSS, Multics, Unix, BSD, Linux, Android, mbed
 
Abstract Data Type (ADT): the module’s state is manipulated only through its API (Application Programming Interface).
 
陳婉雅 p.26 作業系統演進
早期: serial processing 軍事用途 (彈道模擬)
二戰期間,賓州大學和阿伯丁彈道研究實驗室共同負責為陸軍每日提供 6 張火力表,每張表都要計算幾百條彈道,一個熟練的計算員計算一條飛行時間 60 秒的彈道要花 20 小時。儘管改進了微分分析儀,聘用 200 多名計算員, 一張火力表仍要算兩三個月。這是電子計算機發展的迫切需求
Jim H
  • computer 早期指「計算員」,後來才變成專指「機器」
coldnew
  • 第一台計算機 eniac 
 
陳婉雅 p.27 分時多工系統
Jim H 期望的硬體特徵
  • Memory protection for monitor
  • Timer
  • Privileged instructions
  • Interrupts
 
陳婉雅 p.32 作業系統任務: 分配資源
Jim H 電腦科學」之所以不算是「科學」的緣故:先有明確工程需求和實作, 才有整理過的理論發表
 
陳婉雅 p.34 CTSS: 多人多工
 
Jim H process 可定義為
  • a program in execution
  • an instance of a running program
  • the entity that can be assigned to, and executed on, a processor
  • a unit of activity characterized by a single sequential thread of
  • execution, a current state, and an associated set of system resources
 
陳婉雅 p.42 process isolation, dynamic linking(模組化)
 
Jim H p.50 microkernel: 只在核心保留最基本的功能,其他搬去 userspace
 
葉葉 p.62 hypervisor 實例:  big.LITTLE 中大核(CA15)/小核(CA7)之間互相切換(依功能需求切換另一個核心時會通知另一個核心開機並將當前核心關機), 但是切換過程中的interrupt (中間切換過程約需 200 us), 由誰來收 -> [sol] 在核心上增加一個 interrupt 處理單元
Jim H 關鍵字: Linux: KVM, virtio
 
謝 凱 p.70 LInux system component
陳婉雅 重點: system call, scheduler, memory management
 
Jim H 一句話氣死 gcc
 二句話操死 gcc
  • 將數值 `0x8000000F` 放入暫存器 r0 中
  • <r0> | 1 0 0 0 | 0 0 0 0 | 0 0 0 0 |  0 0 0 0 |  0 0 0 0 |  0 0 0 0 | 0 0 0 0 | 1 1 1 1 |
  • mov r1, r0, LSL #1
  • r0 左移 1 bit 後,將值放入 r1 中
  • <r1> |  0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 |  0 0 0 0 |  0 0 0 0 | 0 0 0 1 | 1 1 1 0 |
  • 向左位移後,讀取 r0 的值,經過 barrier shifter 後,數值變成 0x1E
  • bit 31 向左位移後,超過 32 bit 範圍,會被捨棄,而 bit 4, 3, 2, 1 分別位移到 bit 5, 4, 3, 2
 
  • `mov r1, r0, lsl #2` 等價於 `r1 = (int) (r0 << 2)`
  • barrier shift
 
  • 載入 32-bit 常數,該怎麼作?
  • 如果要在 r0 暫存器中,存放 0xDEADBEEF (Hexspeak ),最直接想到這樣作
  • mov r0, 0xDEADBEEF
  • 技術上來說,這是不可能的!為何?ARMv7 (含) 之前,所有的指令都是 32 bit (opcode + operand),以 mov 來說,所有的 32 bit 自然包含 mov 指令本身、目標 register,以及目標值。因此,不可能將任意的 32-bit 編碼的值存放到 32 bit 指令中
  • 直接表示值對 ARM 來說,實際是一個 8-bit 數值和一個旋轉因子,所以可表達以下 32-bit 直接數值
  • 0 x 00 00 00 FF
  • 0 x 00 00 FF 00
  • 0 x FF 00 00 00
  • 0x F0 00 00 0F
  • 但 0x1FF 不是 8-bit 數值,而 0xF000F000 也不可,因為無法經由旋轉而變成 8-bit 數值
  • 所以我們得這樣作
  • load_32bit:
  •     ldr r0, [pc #0] ;;; 請注意: pc 位於目前位址向前 8 bytes 的地方
  •     bx lr
  •     .word 0xDEADBEEF
...
845 days ago
Unfiled. Edited by stu9458@gmail.com 845 days ago
coldnew
  • 使用 Arduino 控制 wifi, bluetooth 模組也會透過 usart
stu9458@gmail.com
  • 好處是非同步和大量通用。
 

Contact Support



Please check out our How-to Guide and FAQ first to see if your question is already answered! :)

If you have a feature request, please add it to this pad. Thanks!


Log in