2-4) Instructions

서진·2023년 4월 17일
0

컴퓨터구조

목록 보기
6/8

Parallelism and Synchronization

2개의 함수가 하나의 메모리 영역을 같이 참조할 때 Data race가 발생하므로, 이것을 방지하기 위한 방법들.

Lock and unlock

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과 비교하여 이동

Translating and Starting a Program

  1. compiler
    C코드 -> assembly language

  2. assembler

  • assembly language -> machine code
  • pseudoinstructions를 $at register를 통해서 확인
  1. linker
    각각의 procedure를 따로따로 compile하고 하나로 link하는 일. 코드 전체를 다시 compile하는게 아니라 수정된 일부분만 compile함
    -> 실행파일을 만든다. (exe)

    - DLL (Dynamically Linked Libraries)
    미리 올려두지 않고 실행할 때 그때그때 필요한 라이브러리만 로드해온다
    
    -SLL (Statically Linked Libraries)
    exe를 만들 때 코드에서 필요한 모든 라이브러리를 한 번에 로드해온다. 실행하기 전에 미리 exe에 다 포함되어 있음
  2. loader
    실행파일을 컴퓨터에서 수행할 수 있도록 메인메모리에 올려서 실행한다.


C -> Assembly language로 번역 - swap

1. 변수(파라미터)에 register 할당하기

$a0 = v
$a1 = k
$t0 = temp

2. body 코드를 변환

3. nested일 경우 register을 저장해둔다

nested procedure에서 return address가 덮어써지는 현상을 stack에 저장해서 해결한다. swap은 nested 아니므로 저장할 필요 없음


C -> Assembly language로 번역 - sort

profile
🫧 ☁️ 🌙 👩🏻•💻 🌿 🐱 🖱 🍟 🚀 ⭐️ 🧸 🍀 💗

0개의 댓글