Krafton Jungle First

모기·2025년 3월 16일

Study.Jungle

목록 보기
2/12
public string DevelopmentDiary(Knowledge knowledge) {
	if (knowledge != null) {
		return "level up"
    } else {
    	return "level down"
    }
}

1. 컴퓨터 시스템으로의 여행

1-1. 정보는 비트와 컨텍스트로 이루어진다.

소스 프로그램 : 0또는 1로 표시되는 비트들의 연속이며 바이트라는 8비트 단위로 구성된다.

1-2. 프로그램은 다른 프로그램에 의해 다른 형태로 번역된다.

  • 각 C문장들은 다른 프로그램들에 의해 저급 기계어 인스트럭션들로 번역됨
  • 인스트럭션들은 실행가능 목적 프로그램이라고 하는 형태로 합쳐져서 바이너리 디스크 파일로 저장됨
  • 목적 프로그램은 실행가능 목적 파일이라고 불림

hello.c -(전처리)-> hello.i -(컴파일러)-> hello.s -(어셈블러)-> hello.o -(링커)-> hello

  1. 전처리 단계: 전처리기는 #문자로 시작하는 디렉티브에 따라 수정
    (ex. 시스템 헤더파일인 stdio.h를 프로그램 문장에 삽입하라고 직접 지시) => .i로 끝나는 새로운 C프로그램 생성
  2. 컴파일 단계: 컴파일러는 텍스트파일 hello.i를 텍스트파일(어셈블리어) hello.s로 번역
 * 어셈블리어는 여러 상위수준 언어의 컴파일러들을 위한 공통의 출력언어 제공
  1. 어셈블리 단계: 어셈블러가 hello.s를 기계어 인스트럭션(바이너리 코드)으로 번역하고 목적 프로그램의 형태로 묶어서 hello.o라는 목적파일에 저장
  2. 링크 단계: 파일과 그 안의 함수들의 목적 파일들 (ex. hello.o, printf.o)를 결합

1-3. 컴파일 시스템이 어떻게 동작하는지 이해하자~

컴파일 시스템이 어떻게 동작하는지 이해하는 것이 중요한 이유

  • 프로그램 성능 최적화 (ex. 함수 호출시 발생하는 *오버헤드, for/while 문)
  • 링크 에러 이해
  • 보안 약점 피하기
* 오버헤드: 어떤 명령어를 처리하는데 소비되는 간접적, 추가적인 컴퓨터 자원
* 오버헤드의 원인: 스택 프레임 생성, 매개변수 전달, 리턴 주소 저장

1-4. 프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다.

1. 시스템의 하드웨어 조직

  • 버스: 시스템 내를 관통하는 전기적 배선군, 컴포넌트들 간에 바이트 정보 전송
  • 입출력 장치: 입출력 버스와 컨트롤러나 어댑터를 통해 연결됨
    • 컨트롤러: 디바이스 자체가 칩셋이거나 시스템의 인쇄기판에 장착됨
    • 어댑터: 머더보드의 슬롯에 장착되는 카드
  • 메인 메모리: 프로그램을 실행하는 동안 데이터와 프로그램을 모두 저장하는 임시 저장장치
    • 물리적 메인 메모리: DRAM 칩들로 구성
    • 논리적 메인 메모리: 연속적인 바이트들의 배열
  • 프로세서(주처리장치, CPU): 메인 메모리에 저장된 인스트럭션들을 해독하는 엔진, 프로세서의 중심에는 워드 크기의 저장장치인 프로그램 카운터(PC)가 있음
    • 레지스터 파일: 고유의 이름을 갖는 워드 크기의 레지스터 집합으로 구성
    • ALU: 새 데이터와 주소 값을 계산
    • 적재(Load): 메인 메모리에서 레지스터에 한 바이트 또는 워드를 이전 값에 덮어쓰는 방식으로 복사
    • 저장(Store): 레지스터에서 메인 메모리에 한 바이트 또는 워드를 이전 값에 덮어쓰는 방식으로 복사
    • 작업(Operate): 두 레지스터의 값을 ALU로 복사하고 두 개의 워드로 수식연산을 수행한 뒤 결과를 덮어쓰기 방식으로 레지스터에 저장
    • 점프(Jump): 인스트럭션 자신으로부터 한 개의 워드를 추출하고 이것을 PC에 덮어쓰기 방식으로 복사

2. hello 프로그램 실행

  1. 쉘 프로그램이 자신의 인스트럭션을 실행하면서 사용자가 명령을 입력하기 기다림
  2. 사용자가 입력하면 쉘 프로그램이 각각의 문자를 레지스터에 읽어들이고 메모리에 저장
  3. 엔터키를 누르면 쉘은 명령 입력을 끝마쳤다는 것을 알게됨
  4. 쉘은 파일 내의 코드와 데이터를 복사하는 일련의 인스트럭션 실행
  5. 실행 파일 hello를 *디스크에서 메인 메모리로 로딩
  6. 프로세서는 hello 프로그램의 main루틴의 기계어 인스트럭션 실행
  7. 인스트럭션들은 "hello, world\n" 스트링을 메모리로부터 레지스터 파일로 복사
  8. 디스플레이 장치로 전송하여 화면에 글자 표시
* 직접 메모리 접근(DMA) 기법을 이용하여 데이터는 프로세서를 거치지 않고 메인 메모리로 직접 이동
 (일반적으로 다음과 같은 경우에 직접 이동)
 1. 대용량 데이터 전송
 2. 실시간 데이터 처리
 3. 임베디드 시스템
profile
안녕

0개의 댓글