Computer Science

Computer Science/컴퓨터 구조

[컴퓨터 구조] 2-6. 논리 연산 명령어

비트들을 워드로 묶는(packing) 작업과 워드를 비트 단위로 나누는 (unpacking) 작업을 간단하게 하는 명령어들이 프로그래밍 언어와 명령어 집합에 추가되었다. 이러한 명령어들을 논리 연산 명령어라 부른다. Shift Operation Shift 연산 워드 내의 모든 비트를 왼쪽 또는 오른쪽으로 이동시키고, 이동 후 빈자리는 0으로 채운다. sll (shift left logical) 비트들을 왼쪽으로 이동시키고 원래 있던 자리는 0으로 채운다. 2를 곱한 것과 같은 결과다. srl (shift right logical) 비트들을 오른쪽으로 이동시키고 원래 있던 자리는 0으로 채운다. 2를 나눈 것과 같은 결과다. AND Operation AND 연산은 bit : bit 연산자로서 두 비트 값이..

Computer Science/컴퓨터 구조

[컴퓨터 구조] 2-5. 명령어의 컴퓨터 내부 표현

거의 모든 명령어가 레지스터를 사용하기 때문에 레지스터 이름을 숫자로 매핑하는 규칙이 있어야 하는데 MIPS에서는 레지스터 $s0에서 $s7까지는 레지스터 번호 16~23번, $t0에서 $t7까지는 8~15번으로 매핑한다. 예제: MIPS 어셈블리 언어를 기계어로 변환 다음 어셈블리 명령어의 실제 MIPS 언어 버전을 십진수와 이진수 형태로 표현하라. add $t0, $s1, $s2 십진수 표현은 다음과 같다. 명령어의 각 부분을 필드(field)라 부른다. 처음과 마지막 필드(0과 32)가 컴퓨터에게 덧셈을 하라고 지시하는 부분이다. 두 번째 필드는 덧셈에 사용할 첫 번째 피연산자 레지스터의 번호(17 = $s1), 세 번째 필드는 두 번째 피연산자 레지스터 번호(18 = $s2), 네 번째 필드는 계..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Networks

Networks 클라이언트와 서버는 종종 별도의 호스트에서 돌아가며, 컴퓨터 네트워크의 하드웨어 및 소프트웨어 리소스를 사용해서 통신한다. 호스트에게 네트워크는 단지 또 다른 I/O 디바이스이며, 데이터를 위한 소스와 싱크로 서비스한다. I/O 버스의 확장 슬롯에 꽂혀 있는 adapter는 네트워크의 물리적인 인터페이스를 제공한다. 네트워크에서 수신한 데이터는 I/O와 메모리 버스를 거쳐서 adapter에서 메모리로, 보통 DMA 전송으로 복사된다. 데이터 또한 메모리에서 네트워크로 복사될 수 있다. 물리적으로 네트워크는 기하학적 위치로 구성된 계층(hierarchical) 구조 시스템이다. 하위 수준은 LAN(Local Area Network)으로 빌딩이나 캠퍼스에 설치된다. 가장 대중적인 LAN 기술..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] The Client-Server Model

네트워크 응용은 주변에서 흔히 찾아볼 수 있다. 웹을 검색하고, 이메일을 보내고, 온라인 게임을 하는 등이 네트워크 응용을 사용하고 있는 것이다. 흥미로운 것은 모든 네트워크 응용들은 동일한 기본적인 프로그래밍 모델에 기초하고 있으며, 비슷한 논리 구조를 가지며, 동일한 프로그래밍 인터페이스를 사용한다는 점이다. The Client-Server Programming Model 모든 네트워크 응용 프로그램은 Client-Server 모델에 기초하고 있다. 이 모델을 사용해서 응용 프로그램은 한 개의 서버 프로세스와 한 개 이상의 클라이언트 프로세스로 구성된다. 서버는 일부 리소스를 관리하고, 이 리소스를 조작해서 클라이언트를 위한 서비스를 제공한다. 예를 들어 웹 서버는 디스크 파일들을 관리하고, 클라이언..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Standard I/O

Standard I/O 라이브러리는 열린 파일을 starem으로 모델링한다. 프로그래머에게 stream은 FILE 유형의 구조에 대한 포인터이다. 모든 ANSI C프로그램은 stdin, stdout, stderr의 3가지 오픈 stream으로 시작한다. #include extern FILE *stdin; /* standard input (descriptor 0) */ extern FILE *stdout; /* standard output (descriptor 1) */ extern FILE *stderr; /* standard error (descriptor 2) */ int main() { fprintf(stdout, "Hello, world\n"); } Buffred I/O : Motivation g..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Sharing Files and Redirection

How the Unix Kernel Represents Open Files 리눅스 파일은 여러 가지 방법으로 공유할 수 있다. 커널이 열린 파일을 어떻게 나타내는지 명확하게 파악하지 못하면 파일 공유에 개념이 혼란스러울 수 있다. 커널은 세 가지 관련 데이터 구조를 사용하여 열린 파일을 나타낸다. Decriptor table 각 프로세스에는 프로세스의 열린 file discriptor에 의해 인덱싱되는 항목이 있는 고유한 decriptor table이 있다. 열려 있는 각 dicriptor entry는 file table의 entry를 가리킨다. File table 열려 있는 file set은 모든 프로세스에서 공유되는 file table로 나타난다. 각 file table 항목은 현재 파일 위치, 현재..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Metadata

Reading File Metadata 프로그램은 stat와 fstat 함수를 호출하여 파일에 대한 정보(metadata)를 검색할 수 있다. #include #include int stat(const char *filename, struct stat *buf); int fstat(int fd, struct stat *buf); Returns: 0 if OK, −1 on error stat 함수는 파일 이름을 입력하면 stat 구조체의 멤버 변수를 설정한다. fstat 함수는 파일 이름 대신 file discriptor를 사용한다. struct stat { dev_t st_dev; /* Device */ ino_t st_ino; /* inode */ mode_t st_mode; /* Protection ..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] RIO (robust I/O) package

Robust Reading and Writing with the RIO Package RIO (Robust I/O) 패키지는 short count를 자동적으로 처리한다. Rio 패키지는 네트워크 프로그램과 같은 short count 대상이 되는 프로그램에서 편리하고 견고하며 효율적인 I/O를 제공한다. Rio는 두 가지 다른 기능을 제공한다. Unbuffered input and ouput finctions. 이러한 함수는 응용 프로그램 수준의 버퍼링 없이 메모리와 파일 간에 데이터를 직접 전송할 수 있다. 네트워크로부터 binary 데이터를 읽고 쓰는 데에 특히 유용하다. rio_readn rio_writen Buffered input functions. 이러한 함수를 사용하면 printf와 같은 표준..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Unix I/O

Input/Ouput (I/O)는 메인 메모리와 디스크 드라이버, 터미널, 네트워크 같은 외부 장치 간에 데이터를 복사하는 프로세스이다. Input은 I/O 디바이스에서 메인 메모리에 데이터를 복사하고 Ouput은 메모리에서 디바이스로 데이터를 복사한다. 모든 language run-time system은 I/O를 수행하기 위해 higher-level의 기능을 제공한다. 예를 들어, ANSI C는 buffer 된 I/O를 실행하는 printf와 scanf 등의 기능을 갖춘 stdin(Standard I/O) 라이브러리를 제공한다. Linux 시스템에서는 커널에서 제공하는 시스템 수준의 Unix I/O 함수를 사용하여 이러한 상위 수준의 I/O 기능이 구현된다. 대부분의 경우 high level의 I/O ..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Signals

Signal Signal 이란 시스템에서 어떤 프로세스에 이벤트가 발생했다고 알려주는 메시지이다. Exception과 interrupt와 유사하다. 커널이 프로세스한테 보내준다. Signal type은 1~30으로 구분할 수 있다. Signal에 signal의 id와 도착했다는 것을 알려주는 정보들이 있다. Signal Concepts : 커널은 대상 프로세스의 컨텍스트에서 일부 상태를 업데이트하여 대상 프로세스에 신호를 전달한다. 신호는 두 가지 이유 중 하나로 전달된다. Sending a Signal 커널이 0으로 나누는 오류 또는 하위 프로세스의 종료와 같은 시스템 이벤트를 감지했을 때 프로세스가 kill 함수를 호출하여 커널이 대상 프로세스에 signal을 보내도록 명시적으로 요구했을 때 Rece..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Shells

Using fork and execve to Run Programs Unix 쉘, 웹 서버 같은 프로그램은 fork와 execve 함수를 많이 사용한다. 쉘은 사용자를 대신하여 다른 프로그램을 실행하는 대화형 응용 프로그램이다. 원래 쉘은 sh 프로그램이었다. 그 뒤에 csh, tcsh, ksh, bash 등의 다양한 프로그램이 생겼다. 쉘은 일련의 read/evaluate 과정을 수행한 뒤 종료된다. read 과정에서 사용자로부터 명령어를 읽어 들인다. eavluate 과정에서 명령어를 해석하고 사용자를 대신하여 프로그램을 실행한다. #include "csapp.h" #define MAXARGS 128 /* Function prototypes */ void eval(char *cmdline); int ..

Computer Science/시스템 프로그래밍

[시스템 프로그래밍] Process Control

Unix는 C 프로그램에서 프로세스를 제어하기 위한 많은 System Call을 제공한다. Obtaining Process IDs 각 프로세스는 고유한 양의 정수인 Process ID(PID)를 가지고 있다. pid_t getpid(void) 현재 프로세스의 PID를 반환한다. pid_t getppid(void) 부모의 PID를 반환한다. #include #include pid_t getpid(void); pid_t getppid(void); getpid와 getppid는 type pid_t의 정수를 반환한다. Linux 시스템에서 pid_t는 type.h에 int로 정의되어 있다. Process Status 프로그래머의 관점에서 프로세스는 세 가지 상태 중 하나라고 생각할 수 있다. Running 프로..

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