OS
tatic __always_inline void __write_once_size(volatile void *p, void *res, int size)
{
//簡單變數之Atomic由MESI協定來確保
switch (size) {
case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
case 2: *(volatile __u16 *)p = *(__u16 *)res; break;
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
/*複雜變數之Atomic由barrier();來確保*/
default:
barrier();
__builtin_memcpy((void *)p, (const void *)res, size);
barrier();
}
}
volatile: 他不保證Atomic,只保證程式碼的執行順序不會因為compiler優化而改變順序(對Programmer來說比較好debug)
module_init(我的起始函數)
//由此可知module_init事實上是一個順位6的初始函數
#define module_init(x) __initcall(x);
#define __initcall(fn) device_initcall(fn)
//其他初始函數可以參考如下,數字越小的會越先被執行:
#define pure_initcall(fn) __define_initcall(fn, 0)
#define core_initcall(fn) __define_initcall(fn, 1)
#define core_initcall_sync(fn) __define_initcall(fn, 1s)
#define postcore_initcall(fn) __define_initcall(fn, 2)
#define postcore_initcall_sync(fn) __define_initcall(fn, 2s)
#define arch_initcall(fn) __define_initcall(fn, 3)
#define arch_initcall_sync(fn) __define_initcall(fn, 3s)
#define subsys_initcall(fn) __define_initcall(fn, 4)
#define subsys_initcall_sync(fn) __define_initcall(fn, 4s)
#define fs_initcall(fn) __define_initcall(fn, 5)
#define fs_initcall_sync(fn) __define_initcall(fn, 5s)
#define rootfs_initcall(fn) __define_initcall(fn, rootfs)
#define device_initcall(fn) __define_initcall(fn, 6)
#define device_initcall_sync(fn) __define_initcall(fn, 6s)
#define late_initcall(fn) __define_initcall(fn, 7)
#define late_initcall_sync(fn) __define_initcall(fn, 7s)
Hello World import tkinter as tk # Create a basic window app=tk.Tk() app.title("This is title") app.geometry('400x300+100+300') # Initial Position of window: (width, height, x, ) # Add Label
Feb 17, 2021本文整理常見(持續補充中)Synchronization、Work Defering機制,主要是將各種方法列出以避免未來使用上的混淆。 至於為什麼把timer、lock、deferring都放在一起整理的話...... 因為我自己感覺概念上都是要等一下在執行接下來的函數lol The kernel sleeping mechanism Introduce to Process Sleeping: You may relax a processor as soon as your process is waiting for something, and make sure a condition or something will wake it up. The kernel scheduler manages a list of tasks to run, known as a run queue.
Jan 6, 2021Polling vs Busy-wait: a. Ref b. Polling 與 busy-wait 概念上都是在等待並反覆地詢問一個資源是否能夠使用(通常是一個I/O裝置) c. 差別只在於busy-wait除了等待不做任何其他事情,polling則在等待時的空檔還有做一些其他事情(即使只是sleep)
Dec 16, 20201.Install Anaconda 2.conda create -n pose python=3.6.8 3.conda activate pose 4.install pytorch conda install pytorch==1.0.1 torchvision==0.2.2 cudatoolkit=10.0 -c pytorch 5.install caffe2 requiements pip install future ^ hypothesis ^ numpy ^ protobuf ^ six
Oct 24, 2020or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up