저번 포스팅에서는 MIPS 명령어에 따라 달라지는 주소 지정 방식을 설명하였습니다. 이번에는 동기화와 C언어의 번역계층에 대해 상세하게 다루어보고, 프로그램 번역과 실행 과정에서 중요한 역할을 하는 컴파일러, 어셈블러, 링커, 로더의 역할에 대해 설명드리려고 합니다. 동기화란 무엇인가? 태스크(작업)가 서로 독립적인 경우에는 병렬 처리가 쉽지만, 서로 협력해야 하는 경우가 있습니다. 협력은 일반적으로 다른 태스크들이 읽어야 하는 값을 어떠한 다른 태스크가 읽고 있음을 의미합니다. 태스크가 언제까지 쓰기를 마쳐야 다른 태스크들이 안전하게 데이터를 읽을 수 있는지 알려면 태스크 동기화가 필요합니다. "동기화"가 존재하지 않으면, 데이터 경쟁관계(data race)의 위험이 있습니다. 여기에서 데이터 경쟁관계..