Hello Computer Vision

비전공생의 컴퓨터 구조 4주차 강의 기록 본문

컴퓨터구조

비전공생의 컴퓨터 구조 4주차 강의 기록

지웅쓰 2022. 11. 6. 01:15

이번 강의 주차에는 MIPS 의 실제 Instruction예시들을 중심으로 강의가 진행되었는데요,

이해되는 선에서 필기를 해보았습니다.

 

main이라는 곳에서 a라는 함수(펑션)를 콜한다면 

main : caller(콜러)

a : callee(콜리)

MIPS에서의 명령어는 jump 와 link를 사용한다.

 

함수 안에 있는 변수들은 로컬 변수들이며 이를 function scope안에 있다고 한다.

함수를 만약 static data에다 저장한다면 실행하지 않을 때도 메모리를 잡아먹으니 dynamic data에다 저장을 한다.
이러한 작업들은 프로그래머가 하는 것이 아닌 자동으로)

그리고 dynamic이든 static이든 각각 할당된 데이터 양이 있을텐데 이 이상으로 코드가 메모리를 잡아먹는다면

프로그램 실행이 되지 않는다.

그리고 리턴값은 callee에 돌아가서 값을 반환하는 것이다.
(여기서 드는 생각은 function에다 print함수를 두는 것과 return 값을 따로 설정하는 것이 처음에는 상관없다고 생각했는데 지금 이 강의를 들으면서 든 생각은 그럼 return 값을 설정해놓으면 펑션 콜을 한 후 그 펑션에 있는 곳까지 가서 리턴 값을 받아오는 것이니 조금이나마 느릴라나? 생각을 하였다. 이 부분은 단순한 제 궁금증입니다)

stack frame

함수에 대한 메모리(파라미터, array, inter ... ) 들은 다 여기에 저장이 된다.  

함수에서 다른 함수를 호출 할 때는 다른 stack frame에 저장한 후 복구하는 과정을 거친다(사라지면 안되니까)

프로그래머들은 주소를 하나하나 신경 쓸 필요 없다.(D램을 제외하고는 다 virtual memory이다)

펑션 콜을 많이 하면 오버히트가 걸릴 수 있다. (아마 함수 콜할 때 필요한 jump, link이러한 작업들을 동시에 많이 해야하니 그런 거 같다.)

Assembly코드에서는 작업을 할 때 메모리를 미리 할당하는 것을 보았다. 아마 메모리 효율성을 최대화 하려는 거 같다.나는 지금까지 메모리 신경쓰지 않고 코드를 짜는 중인데 참 편한 환경에서 하는구나 라는 생각을 하였다..

프로그램이 크고 이것이 한 object파일에만 있다면 일부분만 바꿔도 통째로 다시 컴파일해야하는 번거스러움이 있다.

따라서 관련된 파일들만(object file)만 따로따로 만들고 이 파일들을 합치기 위해 linker가 필요하다.

컴파일러 드라이버는 이러한 translation부분과 linking 부분을 알아서 잘 할 수 있도록 도와준다.

 

오늘 강의 필기는 여기까지입니다.

틀린 점 지적해주시면 감사하겠습니다.

https://www.youtube.com/watch?v=wUcBordHEDo