본문 바로가기
정글

TIL(7일차) CSAPP(Computer Systems)

by 진득한진드기 2023. 4. 28.

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

 

간단하게 생각하면 나의 hello.c 라는 파일 (C언어 확장자) 은 0,1로 구성된 파일이고 8비트(바이트) 단위로 구성된다.

 

hello.c

#include <stdio.h>

int main()
{
	printf("hello, world\n");
    return 0;
}

 

대부분 프로그램은 텍스트 문자를 아스키(ASCII) 표준을 사용하여 표시한다.

 

이 hello.c는 연속된 바이트들로 파일에 저장되는데 hello.c처럼 오로지 아스키 문자들로만 이루어진 파일을 텍스트 파일이라고 한다.

 

다른 모든 파일은 바이너리 파일이라고 한다.

 


프로그램은 다른 프로그램에 의해 다른 형태로 변역된다.

위에 말이 조금 어려울 수 있는데 그냥 .c라는 확장자를 가졌다고 무조건 바로 읽히는것이 아니라 컴퓨터가 읽기 쉽게 번역하는 과정을 거친다는 소리이다.

 

hello.c의 흐름

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 볼펜이 너무 불편해서 막 적었는데 역대급 악필인것 같다....ㅋㅋㅋ

 

위에 그림을 설명하자면 pre-processor(전처리기)를 거쳐 hello.c 파일 첫 줄의 #이 붙은 부분은 전처리기에 시스템 헤더 파일인 stdio.h를 프로그램 문장에 직접 삽입하라고 지시한다.

 

그러면 .i로 끝나는 새로운 C 프로그램이 생성된다.

 

그후 컴파일 단계에 도착하여 hello.i를 텍스트 파일인 hello.s로 번역하여 어셈블리어 프로그램이 저장된다.

 

그 다음 어셈블리 단계로 와서 hello.s를 기계어로 번역해서 목적프로그램 형태로 묶어서 hello.o 라는 결과를 저장하고

 

마지막 링크 단계에서 C 컴파일러에서 제공하는 별도의 목적파일인 printf.o있는데 hello.o와 결합하기 위해 Linker 프로그램을 이용하여 결합한다.

 

그러면 마지막으로 hello파일은 실행가능 목적파일로 메모리에 적재되어 실행되는 것이다.

 

 

대략적인 하드웨어 조직

 

버스 = 시스템 내를 관통하는 전기적 배선군을 버스라고 하고, 컨포넌트들 간에 바이트 정보들을 전송한다.

 

입출력장치 = 입력용 키보드와 마우스, 출력용 디스플레이, 데이터와 프로그램의 장기 저장을 위한 디스크 드라이브 등

 

메인 메모리: 물리적으로 볼때 메인 메모리는 DRAM 칩들로 구성되어 있고, 논리적으로는 연속적인 바이트들의 배열로 되어 있다.

 

프로세서 : 메인 메모리에 저장된 인스턹션들을 해독하는 엔진. PC는 메인 메모리의 기계어 인스터럭션을 가리킨다.

 

CPU 단순작업 예) 

 

적재 : 메인 메모리에서 레지스터에 한 바이트 또는 워드를 이전 값에 덮어쓰는 방식으로로 복사

저장 : 레지스터에서 메인 메모리로 한 바이트 또는 워드를 이전 값을 덮어쓰는 방식으로 복사

작업: 두 레지스터의 값을 ALU로 복사하고 두 개의 워드로 수식연산을 수행한 뒤, 결과를 덮어쓰기 방식으로 레지서트에 저장한다.

 

 

CPU 간단 명령어

 

 


운영체제는 하드웨어를 관리한다

 

운영체제 두가지 주요 목적

 

1. 제멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막기 위해서

2. 응용 프로그램들이 단순하고, 균일한 메커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장칟르을 조작할 수 있도록 하기 위해서

 

 

운영체제 가상화와 하드웨어 목적

 


프로세스

 

운영체제는 문맥전환(context switching) 방법을 사용해서 교차실행을 한다.

 

상태정보: PC, 레지스터 파일, 메인 메모리의 현재 값을 포함하고 있다.

 

시스템 콜: 특수 함수를 호출하여 운영체제로 제어권을 넘겨준다.

 


쓰레드

 

쓰레드 : 다수의 실행 유닛으로 구성되어 있다.

 

데이터 공유가 더 쉽다는 점, 쓰레드가 프로세스보다 더 효율적이다.

 

가상메모리

 

가상화란 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것처럼 추상화 하는 개념

 

프로세스는 가상주소 공간이라는 균일한 메모리의 모습을 가지게 된다.

 


동시성과 병렬성

 

동시성은 다수의 동시에 벌어지는 일을 갖는 시슽메에 관한 일반적인 개념이고, 병렬성이란 동시성을 사용해서 시스테믕ㄹ 보다 빠르게 동작하도록 하는 것을 말할 때 사용한다.

 


쓰레드 수준 동시성

쓰레드를 이용하면 한 개의 프로세스 내에서 실행되는 다수의 제어 흐름을 가질 수도 있다.

 

여러 명이 한 개의 웹 서버로부터 페이지를 사용하고자할 때 처럼 다수의 사용자들이 시스템과 동시에 교신할 수 있게 한다.

 

최근에는 멀티코어와 하이퍼쓰레딩 기버의 출현으로 멀티태스킹 환경이 일반적이다.

 

프로세스에서 쓰레드 들간의 전환을 하는데 자원을 사용하지만 하이퍼쓰레드는 사이클시 실행할 쓰레드를 결정한다.

 

멀티 프로세스의 장점

 

1. 동시성을 시뮬레이션할 필요를 줄여준다.

2. 한 개의 응용프로그램을 빠르게 실행할 수 있다.(병렬성이 좋을때 가능)

 

 

'정글' 카테고리의 다른 글

TIL(9일차) 기계어 인스트럭션 보기  (0) 2023.04.30
TIL(8일차) 어셈블리어  (0) 2023.04.28
TIL(6일차)  (0) 2023.04.27
TIL(5일차)  (1) 2023.04.26
TIL4일차  (0) 2023.04.25