1장 컴퓨터 시스템

#include <stdio.h>
int main() {
    printf("Hello World!");
    return 0;
}

위와 같은 형식의 c언어는 한글자씩 바이트로 변환되는데 이를 아스키코드라고 한다.

  • 아스키 코드: 한 문자(1바이트)를 숫자로 대응한 것 (1바이트 -> 8비트)
  • 아스키 코드표: https://namu.wiki/w/%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C

컴파일 작동방식

c언어로 작성된 파일은 전처리 -> 컴파일 -> 어셈블러 -> 링커로 나뉜다. (컴파일의 일련과정)

  1. 전처리
    #include <stdio.h>
    

    위와 같은 라이브러리를 소스코드에 직접 삽입한다.

  2. 컴파일 어셈블리 언어로 번역하여 기계가 직접 동작을 실행할 수 있도록 변경한다.

  3. 어셈블러 기계어로 번역한다.

  4. 링커 해당 파일을 실행 가능한 목적 파일로 만들어준다. -> 실행가능

시스템구성도

CPU (프로세서)

  • PC(프로그렘 카운터): 메인메모리의 해독할 인스트럭션(명렁)을 가리킨다.
  • ALU(수식/논리 처리기): 새 데이터와 주소값을 계산
  • 레지스터 파일: 각각 고유의 이름을 갖는 워드 크기의 레지스터 집합
  1. PC가 가리킨 인스트럭션을 수행한다.
  2. PC값이 다음 인스트럭션 위치를 가리키도록 업데이트한다. (업데이트 대상은 랜덤)

CPU, PC는 메인메모리, 레지스터 파일, ALU 주위를 순환한다.

인스트럭션 요청에 의해 CPU가 실행하는 단순한 작업의 예

  1. 적재
  2. 저장
  3. 작업
  4. 점프

버스

데이터 통로 - 단위 워드(word)

  • 1워드
  • 32bit 컴퓨터 -> 4바이트
  • 64bit 컴퓨터 -> 8바이트

메인메모리 (Random Acess Memory)

연속적인 바이트 배열

입출력장치

모니터, 키보드, 외장하드 등

hello 프로그램 실행

그림 참조

shell_to_memory

disk_to_memory

show_display

캐시

cache_memory

  1. 지역성 메모리
  2. 자주 접근되는 데이터 저장소

memory_hierarchy

운영체제

  • 하드웨어와 소프트웨어 사이에 존재하는 소프트웨어
  1. 응용프로그램들이 제멋대로 동작하는 것을 막기위해
  2. 복잡한 저수준 하드웨어 장치들을 조작하기 위해

운영체제 추상화

  • 포식스: IEEE에서 명명한 유닉스 표준
  1. 입출력장치 - Files 추상화
  2. 메인메모리 + 입출력장치 - Virual Memory 추상화
  3. 메인메모리 + 입출력장치 + 프로세서 - Processes 추상화

프로세스

process

프로세서가 실행하는 운영체제 추상화 - 여러개 가능

  • 동시: 문맥전환(Context Switching) 방법을 통해 교차 실행
  • 컨텍스트(Context) - PC, 레지스터 파일, 메인 메모리의 현재값

동시성 프로세스

  • 프로세스 A -> B
    1. 프로세스와 컨텍스트를 생성
    2. 컨텍스트를 넘김 (프로세스 A의 제어권 넘어감)
  • 프로세스 A <- B
    1. 컨텍스트를 다시 넘김 (프로세스 A의 제어권 복구)

쓰레드(Thread) 각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행된다. 동일한 코드와 전역 데이터를 공유한다.

가상 메모리

각 프로세스는 가상주소 공간이라는 균일한 메모리의 모습을 지님

  1. 최상위 영역: 프로세스가 공통으로 사용하는 운영체제의 코드와 데이터를 위한 공간
  2. 힙(런타임 힙): 동적 공간
  3. 공유라이브러리: C 표준라이브러리, 수학 라이브러리 등의 공간
  4. 스택: 함수 호출을 구현하기 위해 사용하는 공간 (동적)
  5. 커널 가상메모리: 주소공간 맨 윗 부분, 응용프로그램들은 접근금지인 공간

파일

연속된 바이트들, 모든 입출력 장치들은 파일로 모델링한다.

동시성과 병렬성

  • 동시성: 다수의 동시에 일어나는 일을 갖는 시스템
  • 병렬성: 동시성을 이용해 시스템을 좀 더 빨리 만드는 기술

댓글남기기