2개의 함수가 하나의 메모리 영역을 같이 참조할 때 Data race가 발생하므로, 이것을 방지하기 위한 방법들.
ll (load linked)
word를 load해온다. lw와 비슷하지만 다른 부분은 메모리의 해당 주솟값에 있는 데이터를 읽어오고, 그 주소값의 데이터 값이 바뀌는지를 감지한다
sc (store conditional)
sw와 비슷하지만 해당 주소값의 값이 cpu에 의해 접근이 됐는지 안됐는지를 감지한다
return 1 : ll
이후로 값이 바뀌지 않은 상황
return 0 : ll
이후로 값이 바뀐 상황
ll $t1,0,($s1) #s1의 주소값에 있는 데이터를 t1으로 읽어오고, 그 주소값이
바뀌는지 감지한다
sc $t0,0,($s1) #s1의 주소값에 t0을 저장한다. s1이 바뀌었으면 0,
안 바뀌었으면 1을 저장
beq $t0,$zero,again #t0에 1또는 0이 저장되니 이 값을 0과 비교하여 이동
compiler
C코드 -> assembly language
assembler
$at
register를 통해서 확인linker
각각의 procedure를 따로따로 compile하고 하나로 link하는 일. 코드 전체를 다시 compile하는게 아니라 수정된 일부분만 compile함
-> 실행파일을 만든다. (exe)
- DLL (Dynamically Linked Libraries)
미리 올려두지 않고 실행할 때 그때그때 필요한 라이브러리만 로드해온다
-SLL (Statically Linked Libraries)
exe를 만들 때 코드에서 필요한 모든 라이브러리를 한 번에 로드해온다. 실행하기 전에 미리 exe에 다 포함되어 있음
loader
실행파일을 컴퓨터에서 수행할 수 있도록 메인메모리에 올려서 실행한다.
$a0 = v
$a1 = k
$t0 = temp
nested procedure에서 return address가 덮어써지는 현상을 stack에 저장해서 해결한다. swap은 nested 아니므로 저장할 필요 없음