Computer Science

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] System Call Error Handling

System Call Error Handling UNIX 시스템 레벨의 함수에 에러가 발생하면, 보통 -1을 반환하여 무엇이 잘못되었는지를 알 수 있도록 전역 변수 errno를 설정한다. 프로그래머는 항상 에러를 체크해야 하지만 건너뛰는 경우가 많다. 왜냐하면 에러 체크를 하면 코드가 흐트러지고 읽기 어려워지기 때문이다. 예를 들어 Linux fork 함수를 호출할 때 에러를 확인하는 방법은 다음과 같다. if ((pid = fork()) < 0) { fprintf(stderr, "fork error: %s\n", strerror(errno)); exit(0); } fork() 함수의 반환 값이 -1이면 오류가 발생한 것으로 위와 같이 처리한다. strerror 함수는 errono의 특정 값과 관련된 에..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Process

프로세스의 정의 A process is an instance of a running program 프로세스는 실행 중인 프로그램의 인스턴스이다. 프로그램을 컴파일(compile)하면 Object Code가 생성되고 기계어 집합이 된다. 프로세스는 코드가 메모리에 적재된 이후에 CPU를 사용할 수 있는 상태를 말한다. compile이란, 인간이 이해할 수 있는 언어로 작성된 소스 코드(고수준 언어 : C, C++, Java 등)를 CPU가 이해할 수 있는 언어(저수준 언어 : 기계어)로 번역(변환)하는 작업을 말한다. 컴파일된 기계어 집합이 메모리의 Code, Stack, Heap, Data 영역에 할당된다. 프로세스는 각 프로그램에게 두가지 중요한 추상화를 제공한다. Logical control flow..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Exceptions

Exceptions Exception은 프로세서(CPU)의 상태가 변경되는 이벤트에 대한 응답으로 OS 커널로 제어를 넘기는 것이다. Examples of Events Divde by 0 arithmetic overflow page fault I/O request completes typing Ctrl-C 이벤트는 현재 명령어를 실행하는 것과 직접적인 관계가 있을 수 있다. 그 예로 page fault, arthmetic overflow, divde by zero가 있다. 반면에, 이벤트가 발생한 것이 현재 명령어의 실행과 관련 없는 것이 있을 수 있다. 그 예로 timer interrupt, I/O request가 있다. CPU가 이벤트를 감지하면, 특정 이벤트를 처리하기 위해 만들어진 OS의 서브루틴..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Exceptional Control Flow

Control Flow CPU에 전원이 공급된 시점부터 차단될 때까지 CPU는 sequence of instrcutons(machine code)을 한 번에 하나씩 읽고 실행한다. 명령어를 읽고 실행하는 연속된 흐름을 CPU의 Contrl Flow라고 한다. CPU관점에서 프로그램 또는 프로세스는 여러 개의 명령어가 모여있는 집합이다. 메모리에 명령어 집합이 올라가고 어드레스 버스에 신호를 주게 되면 어떤 어드레스를 접근할 것인지 CPU안에 있는 PC/IP 레지스터 값을 보고 해당 주소에 접근하여 명령어를 가져온다. 명령어의 주소는 데이터 버스를 통해서 CPU안에 있는 Instruction Register(IR)로 저장된다. 그다음 디코딩하여 op코드가 무엇인지 보고 실행한다. PC(program cou..

Computer Science/컴퓨터 구조

[컴퓨터 구조] 2-4. 부호 있는 수와 부호 없는 수

컴퓨터 내에서는 일련의 높고 낮은 전기 신호의 형태로 숫자를 저장하므로 결국 기수 2인 수로 볼 수 있다. 모든 정보는 이진 자릿수(binary digit), 즉 비트(bit)로 구성되므로 비트가 계산의 기본 단위가 된다. 이 기본 단위는 높음/낮음, 온/오프, 참/거짓, 1/0 등 두 값 중 한 값을 갖게 된다. 부호 없는 수 unsigned Numbers 워드 내의 각 비트에 오른쪽에서 왼쪽으로 0, 1, 2, 3, ...과 같이 번호를 붙인다. 아래 그림은 MIPS 워드 내의 비트에 번호를 붙이는 방식과 숫자 1011(2)의 표현을 보여주고 있다. 워드는 수평으로뿐만 아니라 수직으로도 그릴 수 있기 때문에, 가장 오른쪽 혹은 가장 왼쪽 비트라고 말하면 애매할 수가 있다. 대신 LSB(least si..

Computer Science/컴퓨터 구조

[컴퓨터 구조] 2-3. 피연산자

상위 수준 언어 프로그램과는 달리 산술 명령어의 피연산자에는 제약이 있다. 레지스터(register)라고 하는 하드웨어로 직접 구현된 특수 위치 몇 곳에 있는 것만을 사용할 수 있다. MIPS 구조에서 레지스터의 크기는 32비트이다. MIPS에서는 32비트가 한 덩어리로 처리되는 일이 매우 빈번하므로 이것을 워드(word)라고 부른다. 변수와 하드웨어 레지스터의 큰 차이점 하나는 레지스터는 개수가 한정되어 있다는 점이다. 기호 형태로 표현된 MIPS 언어를 단계적으로 구체화할 때 산술 명령어의 각 피연산자는 32개의 32비트 레지스터 중 하나여야 하는 제약이 있다. 레지스터 개수를 32개로 제한하는 이유는 하드웨어 기술의 바탕이 되는 세 가지 설계 원칙 중 두 번째 원칙에서 찾을 수 있다. 설계 원칙 2..

Computer Science/컴퓨터 구조

[컴퓨터 구조] 2-2. 하드웨어 연산

컴퓨터 언어에서 단어를 명령어(instruction)라고 하고 그 어휘를 명령어 집합(instrcution set)이라고 한다. 기본적으로 모든 컴퓨터는 산술 연산을 할 수 있어야 한다. 다음 MIPS 어셈블리 언어는 두 변수 b와 c를 더해서 그 합을 a에 넣으라고 컴퓨터에 지시하는 것이다. add a, b, c MIPS 산술 명령어는 한 종류의 연산만 지시하며 항상 변수 3개를 갖는 형식을 엄격히 지킨다. 다음은 네 변수의 합을 구하는 명령어들이다. adda, b, c# The sum of b and c is placed in a adda, a, d# The sum of b, c and d is now in a adda, a, e# The sum of b, c, d and e is now in a​ ..

Computer Science/컴퓨터 구조

[컴퓨터 구조] 1.6 시스템의 성능

성능의 정의 두 데스크톱 컴퓨터에서 같은 프로그램을 실행시키는 경우에 먼저 끝나는 쪽이 더 빠른 컴퓨터라고 할 수 있을 것이다. 그러나 여러 대의 서버를 가지고 여러 사용자의 작업을 처리하는 데이터센터를 운영할 때는 하루 동안 더 많은 작업을 처리하는 컴퓨터가 더 빠른 컴퓨터일 것이다. 컴퓨터 사용자 개인의 입장에서는 응답 시간(response time) - 작업 개시에서 종료까지의 시간 - 즉 실행시간(execution time)이 중요할 것이다. 그러나 데이터센터 관리자에게는 처리량(throughput), 혹은 대역폭(bandwidth)- 일정한 시간 동안 처리하는 작업의 양 이 더 중요하다. 그러므로 개인 휴대용 기기와 서버의 성능을 평가할 때 다른 성능 척도를 사용한다. 혼돈을 피하기 위하여 컴퓨..

Computer Science/컴퓨터 구조

[컴퓨터 구조] 1.5 프로세서와 메모리 생산 기술

트랜지스터(transistor)는 한 마디로 전기로 제어되는 온/오프 스위치이다. 집적회로(integrated circuit, IC)는 수십, 수백 개의 트랜지스터를 칩 하나에 집적시킨 것이다. 집적회로의 집적도는 매우 일정한 속도로 증가하고 있다. 어떻게 집적회로를 만드는지 이해하기 위해서 맨 처음부터 시작하도록 하자. 집적회로 칩의 생산은 모래의 구성 성분인 실리콘에서부터 출발한다. 실리콘(sili-con)은 전기를 통하기는 하는데 썩 잘 통하는 편은 아니어서 반도체(semiconductor)라고 부른다. 특수한 화학적 처리를 거쳐 불순물을 첨가하면 실리콘의 작은 부분을 다음 세 가지 중 하나로 바꿀 수 있다. 전기의 양동체(초소형 구리나 알루미늄 전선) 전기 절연체(플라스틱 피복이나 유리 등) 조건..

Computer Science/컴퓨터 구조

[컴퓨터 구조] 1.4 케이스를 열고

디스플레이 대부분의 개인 휴대용 기기들은 얇고 전력 소모가 적은 LCD(liquid crystal display)를 사용한다. LCD는 스스로 빛을 내는 대신 통과하는 빛을 제어한다. 전형적인 LCD에는 액체 상태의 막대 모양 분자가 있어서 디스플레이에 들어오는 빛을 굴절시킨다. 터치스크린 터치스크린(touchscreen)을 구현하는 다양한 방법이 있는데 오늘날의 많은 태블릿은 정전용량 감지 기법을 사용한다. 유리 같은 절연체 위에 투명한 도체를 코팅하면, 사람이 손을 댔을 때 손에 전기가 통하기 때문에 스크린의 정전기장이 찌그러지면서 정전용량이 변하게 된다. 이 기술은 여러 군데 동시에 손을 대는 것도 허용하며, 손의 동작까지 감지해서 멋진 사용자 인터페이스를 만들 수 있게도 한다. 상자를 열고 프로세..

Computer Science/컴퓨터 구조

[컴퓨터 구조] 1.3 프로그램 밑의 세계

컴퓨터 하드웨어는 아주 단순한 저수준의 명령어만 실행할 수 있다. 복잡한 응용에서 출발해서 단순한 명령어까지 내려가려면 높은 수준의 작업을 단순한 컴퓨터 명령어로 번역 또는 해독하는 여러 겹의 소프트웨어가 필요하다. 이것이 추상화라고 하는 위대한 아이디어의 한 예이다. 이러한 소프트웨어들은 계층적으로 구성된다. 그림과 같이 응용 프로그램이 가장 바깥쪽에 위치하며, 여러 시스템 소프트웨어가 하드웨어와 응용 소프트웨어 사이에 존재한다. 시스템 소프트웨어에는 여러 가지가 있으나, 현대 컴퓨터 시스템에서 핵심이 되는 두 가지는 운영체제와 컴파일러이다. 운영체제는 사용자 프로그램과 하드웨어 간의 인터페이스 역할을 하면서 각종 서비스와 감독 기능을 제공한다. 기본적 입출력 작업의 처리 보조기억장치 및 메모리 할당 ..

Computer Science/컴퓨터 구조

[컴퓨터 구조] 1-2. 일곱 가지 위대한 아이디어

설계를 단순화하는 추상화(Abstrcation) 컴퓨터 설계자와 프로그래머는 자원의 수가 급격히 증가함에 따라 설계 시간이 길어지는 것을 방지하기 위해서 생산성을 높이기 위한 기술을 개발해야 했다. 하드웨어와 소프트웨어의 생산성을 높이기 위한 기술 중 하나는 여러 수준에서 설계를 명시하는 추상화(abstraction)를 사용하는 것이다. 하위 수준의 상세한 사항을 안 보이게 함으로써 상위 수준 모델을 단순화한다. 자주 생기는 일을 빠르게 자주 생기는 일을 빠르게 만드는 것이 드물게 생기는 일을 최적화하는 것보다 성능 개선에 도움이 된다. 아이러니하게도 자주 생기는 일은 드물게 생기는 일보다 단순하여 성능을 개선하기 쉬운 경우가 많다. 이 말은 자주 생기는 일이 무엇인지 미리 알고 있다는 것을 가정하고 있..

또 고민 중
'Computer Science' 카테고리의 글 목록 (4 Page)