piplining 의 순서를 잘 짜서, 물리적으로는 코어가 하나인데 마치 여러개인 것처럼 보이게하는 하드웨어 기술thread : 앞서 말한 쓰레드가 아니라, 하드웨어에서의 쓰레드이다.=> 물리적인 실제 코어 하나당 가상화를 진행해서 2개인것처럼 보이게한다.Instruc
여러 쓰레드들이 메모리에 있는 한 데이터를 보는경우, shared 되었다고 한다. Conceptual Model 멀티 쓰레드는 하나의 process (single process) 에서 돌아야한다.각 쓰레드는 본인만의 thread context 를 가지고있다. (thre
본 포스트팅은 인하대학교 컴퓨터공학과 시스템 프로그래밍 수업자료에 기반하고 있습니다. 개인적인 학습을 위한 정리여서 설명이 다소 미흡할 수 있으니, 간단히 참고하실 분들만 포스팅을 참고해주세요 😎 Classical Problems in Concurrent Progr
본 포스트팅은 인하대학교 컴퓨터공학과 시스템 프로그래밍 수업자료에 기반하고 있습니다. 개인적인 학습을 위한 정리여서 설명이 다소 미흡할 수 있으니, 간단히 참고하실 분들만 포스팅을 참고해주세요 😎
위처럼 . 을 기준으로 표현.ex) 1011.101 => 소수점 아래부분은 2^-1 + 2^-3 이 된다.right shift(우측 연산 쉬프트) : 2로 나누는것과 동일left shift(좌측 연산 쉬프트) : 2를 곱하는 것과 동일위처럼 1에 근사한다는 숫자의 표현
본 포스팅은 인하대학교 컴퓨터공학과 시스템 프로그래밍 수업자료에 기반하고 있습니다.link 할떄 malloc 과 같이 libc 라는 c언어의 내장라이브러리의 함수를 호출할때, 별도로 link 을 하지않더라도 (컴파일을 안해도) 잘 쓸수있다.=> 이는 너무 자주 사용하
본 포스팅은 인하대학교 컴퓨터공학과 시스템프로그래밍 수업자료에 기반하고 있습니다.앞서 살핀 파일들의 포맷(relocateable, executable, shared object file ) 을 통칭해서 ELF 라고 부른다. 위의 3가지 오브젝트 파일들은 표준이 되는 b
Linking 이란 오브젝트(.obj) 코드를 executable binary code (.exe 바이너리 코드) 로 바꿔주는 녀석이다.기본적으로 컴파일을 하면 Static Linking 이라는 것이 발생한다.gcc 로 프로그램이 돌아가는 실행파일(.exe) 를 만들고
본 포스팅은 인하대학교 컴퓨터공학과 시스템 프로그래밍 수업자료에 기반하고 있습니다.캐시의 성능을 아래 Maxtix Multiplication 예제를 보면서 분석해보자.nxn 짜리 정사각형 행렬 2개를 곱하는 상황이다. 3중 for 문을 돌리는데, 내부에서 반복문을 돌리
메모리와 CPU 사이에 존재하며, 수많은 데이터중에서 일부 중요한 몇개의 데이터만 사용하고 싶을떄 캐시에 따로 저장한다.아래 그림을 보듯이 메모리보다 더 크기가 작아서, 소량의 데이터를 저장 가능하다.메모리도 캐시(Cache) 의 기능처럼, 디스크에 있는 대용량의 데이
stack 의 사이즈를 충분히 넉넉하게 할당해서, buffer overflow 가 발생하는 일을 피하자.gets(), strcpy() 등으로 입력받는 일을 피하자.=> fegts(), strncpy() 등을 대신 사용하자!fgets 는 정확하게 사용자에게 얼마만큼의 입
스택각 process 마다 8MB 제한이 있다.힙malloc() 으로 동적 할당한 메모리를 저장하는 공간Text / Shared Libraries프로그램을 실행하면 돌아갈 명령어들이 들어있다read only : 프로세스를 실행시키면 read only 상태이다.int l
스택에 쌓임배열이름 : 포인터 (배열의 주소를 리턴해줌)=> val + i : int형 배열 시작주소에 i바이트만큼 더한것예제rdi == z (배열의 시작주소)rsi == digit (배열의 digit 번째 인덱스 번호)movl(%rdi, %rsi, 4), %eax :
그림을 잘 보면 스택의 bottom 이 위쪽에 있고, top 이 아래쪽에 있다!stack은 메모리를 더 사용할수록 밑으로 자라난다.(cf. heap 은 위로 자라남)rsp 라는 특수한 레지스터가 스택의 맨 아래 주소를 가리키고 있음 (즉, 스택의 top 원소를 가리킨다
c언어 코드를 goto 버전으로 향상시켜봄.L2 == loopjne : ZF 가 1이 아니면 jump를 한다. 즉, x가 0이 아니라면 점프를 한다.while 문이 do-while 보다 비효율적이다!while 문 동작과정 : 아래 그림을 보듯이, 맨 처음부터 아무것도
Normal (형태1) : R -> Mem\[RegR]해석 ) 레지스터 R 이 가리키는 메모리에 저장된 값 ( Mem\[RegR] ) 을 또 다른 레지스터 ( R ) 에 값을 복사하는 것 예시) movq (%rcx), %raxrcx 레지스터에 저장된 값을 rax 레
주소를 가지고 있는 변수일반 변수앞에다 & 를 붙이면 주소가 리턴됨 (reference operator)포인터 변수 앞에다 별표 \* 를 붙이면 포인터 변수가 가리키는 변수에 저장된 값이 리턴됨 (value of operator)예시malloc() 으로 동적으로 할당한
<=> physical memory 와 비교했을때, 물리적으로 제한이 되는 메모리 공간을 유저가 사용할 때는 제한이 없도록 보여준다.왜 만들었는가?메모리가 처음 만들어졌을때 운영채제들이 한 프로그램을 유저가 실행시키면 다 들고온다.
운영채제(OS) 는 유저에게 CPU(register) 와 캐쉬(cache) 와 등의 메모리 공간에 대한 그 어떠한 접근권한을 주지 않는다.cache (캐쉬) 는 main memory 나 storage 에 저장된 데이터 중에 자주 쓰이는 데이터를 미리 들고 있다가 필요할