Fundamental of CS 26

기기별 운영체제 점유율

기기별 운영체제 점유율 우리가 인지하지 못하는 사이 리눅스는 우리 생활을 이루고 있습니다.이번 시간에는 전 세계에서 IT 각 기기별로 리눅스 운영체제를 얼마나 쓰는지 알아보겠습니다. - 데스크탑(PC)- 휴대폰 - 슈퍼컴퓨터​​  1.  데스크탑 PC 운영체제 점유율 먼저 다음 그림을 보면서 데스크탑 PC 운영체제 점유율을 확인해봅시다.[출처: http://gs.statcounter.com/os-market-share/desktop/worldwide]   위 그래프 가장 윗부분에 Microsoft ‘윈도우 NT 계열’ 운영체제가 73.31% 점유율로 부동의 1위를 지키고 있습니다. 그다음으로 iOS가 15.45% 그리고 리눅스는 4.5% 점유율을 보입니다. 유닉스 계열 운영체제로 분류되는 iOS와 리눅스..

정렬 별 성능비교

1. 정렬 방법 별 성능 비교 알고리즘최선평균최악삽입 정렬O(n)O(n^2)O(n^2)선택 정렬O(n^2)O(n^2)O(n^2)버블 정렬O(n)O(n^2)O(n^2)셸 정렬O(n)O(n^1.5)O(n^1.5)퀵 정렬O(nlog_2 n)O(nlog_2 n)O(n^2)힙 정렬O(nlog_2 n)O(nlog_2 n)O(nlog_2 n)합병 정렬O(nlog_2 n)O(nlog_2 n)O(nlog_2 n)기수 정렬O(dn)O(dn)O(dn)      2. 정렬 알고리즘 별 실험 결과 (정수: 60,000개) 알고리즘실행 시간(단위: sec)삽입 정렬7.438선택 정렬10.842버블 정렬22.894셸 정렬0.056힙 정렬0.034합병 정렬0.026퀵 정렬0.014

x86-64 CPU 레지스터(Register) 종류, 32bit / 64bit 비교

1. 레지스터란?   CPU의 빠른 데이터 처리를 돕기 위해 사용되는 임시저장공간으로, 처리중인 데이터나 처리 결과를 담는다.  레지스터의 종류에는 범용 레지스터, 세그먼트 레지스터, 포인터 레지스터, 인덱스 레지스터, 플래그 레지스터가 있다.    32bit, 64bit 운영체제에서 32bit, 64bit 는 레지스터 및 데이터 경로의 크기 를 의미한다.  위 예시에서 AH 는 8bit 운영체제와 호환되는 레지스터라고 이해하면 된다.    운영체제의 발전에 따라, 수행해야할 기능이 많아지면서  많은 정보를 다룰 수 있도록 새로운 레지스터가 추가되고, 크기도 점점 커졌다. ※ E 는 Extended 의 약자. CPU의 아키텍쳐에 따라 레지스터의 종류가 다를 수 있다.     2. 범용 레지스터   범용 ..

[CSAPP] Ch 9. 가상메모리 : (1) 물리 및 가상주소 방식

0. Intro 제한된 자원인 물리메모리를 보다 효율적이게 관리하기 위해서 현대의 시스템은 가상메모리라는 메모리의 추상화를 제공한다.가상메모리는 각 프로세스에 하나의 크고 통합된, 사적 주소공간(가상메모리)를 제공한다.​   가상메모리의 중요한 기능 세가지     1. 메인메모리를 디스크에 저장된 주소공간에 대한 "캐시"로 취급하여, 메인메모리를 효과적으로 사용한다.    2. 각 프로세스마다 통일된 주소공간을 제공하여 메모리 관리를 단순화한다.    3. 각 프로세스의 주소공간을 다른 프로세스에 의한 손상으로부터 보호한다.    1. 물리 및 가상주소 방식   9.1 물리 및 가상주소 방식   컴퓨터의 메인메모리(RAM)은 M개의 연속적인 바이트 배열로 구성된다.  각 바이트는 "물리주소(PA)" 라고..

Thread 종류

0. Intro   Hardware Thread, OS Thread , Native Thread , Kernel Thread , User Thread , 그린 Thread 의 개념을 알아보자   우리가 작성한 프로그램은 컴퓨터상에서 아래와 같은 형태로 동작을 합니다. 그래서 기본적으로 컴퓨터를 구성하는 하드웨어가 있고, 하드웨어 및 전체 컴퓨터 시스템을 관리하는 OS가 있습니다. 그리고, 프로그래머가 개발하는 프로그램은 OS를 통해서 하드웨어를 사용하게 됩니다.   총 3개의 레벨로 구성이 되어있는데, 각 쓰레드들은 각 레벨과 관련된 쓰레드들입니다.    1. Hardware Thread 지금까지 우리가 배워왔단 쓰레드 개념은 잠시 잊고 백지상태라고 생각해보자.   1.1  코어(core)의 고민 : 메..

LLVM

he LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines, though it does provide helpful libraries that can be used to build them. The name "LLVM" itself is not an acronym; it is the full name of the project.LLVM 프로젝트는 모듈식의 재사용 가능한 컴파일러와 툴체인의 집합입니다. 이 이름에도 불구하고 LLVM은 기존의 가상머신과는 그것을 만드는데 ..

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (9) 이기종 자료구조, (10) 기계수준 프로그램에서 제어와 데이터의 결합

3.9 이기종 자료구조   C는 서로 다른 유형의 객체를 연결해서 자료형을 만드는 두 가지 방법을 제공한다.    (1) 구조체 : struct 키워드를 사용해서 선언, 다수의 객체를 하나의 단위로 연결    (2) 공용체 : union 키워드로 선언, 하나의 객체를 여러 개의 다른 자료형으로 참조될 수 있도록 함    3.9.1  구조체   C struct 선언은 서로 다른 유형의 객체들을 하나의 객체로 묶어주는 자료형을 생성한다. 하나의 구조체 내의 서로 다른 컴포넌트들은 이름을 이용해서 참조된다. 구조체의 구현은 구조체의 모든 컴포넌트들이 메모리의 연속된 영역에 저장되며, 구조체의 포인터가 첫 번째 바이트의 주소라는 점에서 배열과 유사하다. 컴파일러는 각 필드의 byte offset을 가리키는 각 ..

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (6) 제어문

3.6  제어문   3.6.1  조건코드   앞서 보았듯, CPU에는 정수 레지스터와 함께 가장 최근의 산술 또는 논리연산의 특성을 설명하는 레지스터들을 운영한다.CF: 캐리플래그(carry flag). 가장 최근의 연산에서 가장 중요한 비트로부터 올림이 발생한 것을 표시→비부호형 연산에서 오버플로우를 검출ZF: 영플래그 (Zero flag). 가장 최근 연산의 결과가 0인것을 표시SF: 부호 플래그 (Sign flag). 가장 최근 연산이 음수를 생성한것을 표시OF: 오버플로우 플래그 (Overflow flag). 가장 최근 연산이 2의 보수 오버플로우를 발생시킨 것을 표시→ 부호형 연산에서 오버플로우를 검출​​다른 레지스터들은 변경시키지 않으면서 조건 코드만 변경해 주는 두 개의 인스트럭션이 있다. ..

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (5) 산술연산과 논리연산

3.5  산술연산과 논리연산    3.5.1  유효주소 적재 (Load Effective Address)    leaq는 movq와 유사하나, leaq는 포인터를 생성하기 위해 사용된다는 차이가 있다. 즉, leaq 는 실제 데이터를 읽어오는게 아니라, 메모리의 주소자체 혹은 주소계산값을 가져온다.​  이 명령어는 가리키는 위치에서 읽기를 수행하는 대신 '유효주소'를 목적지에 복사한다. 그래서 목적 오퍼랜드에는 반드시 레지스터만 올 수 있다.    3.5.2  단항 및 이항 연산  여기서 단항연산은 c언어에서 i++ 과 같은 자기 혼자서도 연산이 가능한 연산, 이항연산은 a+=c 같은, 다른 항이 존재해야 하는 연산이다. 이항연산에서 두번째 오퍼랜드는 소스이면서 목적지로 사용된다.  소스에는 상수, 레지..

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (4) 정보 접근하기

3.4  정보 접근하기   x86-64 CPU 는 64bit 값을 저장할 수 있는 16개의 범용 레지스터를 보유하고 있다. 이 레지스터들은 정수 데이터와 포인터를 저장하는데 쓰인다. 64bit로 확장하면서 8개의 새로운 레지스터들이 추가되었으며, %r8 ~ %r15라 칭한다. 레지스터 관련 참고 :x86-64 CPU 레지스터(Register) 종류, 32bit / 64bit 비교 (tistory.com)   중첩된 사각형이 보여주듯, 인스트럭션들은 16개의 레지스터 하위 바이트들에 저장된 다양한 크기의 데이터에 대해 연산할 수 있다. 바이트수준 연산들은 가장 덜 중요한 바이트에 대해 연산을 할 수 있으며, 16비트 연산들은 가장 덜 중요한2바이트에 접근하고, 32비트 연산은 덜 중요한 4바이트에, 64비..