본문 바로가기

컴퓨터공학 기초19

1. 컴퓨터의 구성요소 및 기능 1. 컴퓨터의 기본 구성 a) 중앙처리장치(CPU - Central Processing Unit) - CPU / MPU b) 주변장치(Peripheral Device) - 기억장치(Memory Unit) - 보조기억장치(Auxiliary memory device) - 입출력장치(I/O device) 2. 중앙처리장치에 대하여 a) CPU - 마더보드(Mother board): 데이터의 전달 통로가 설계되어 있는 메인보드 - 역할: 실행 프로그램의 코드/명령을 해석, 실행, 장치제어한다. b) CPU의 구조 c)MPU(Micro Processing Unit) - 병렬처리, 멀티쓰레딩 등이 가능한 CPU - 인텔 선전에보면 마이크로 프로세서 라고 하는데, 이를 의미하는 것이다. d) CPU의 발전 - CPU.. 2021. 8. 2.
19. 프로세스 - IPC 기법(파일, 파이프) - IPC 기법을 온전히 이해하기 위해서는 코드를 기반한 이해가 가장 적합하다. - 이를 위해서는 C언어 기반의 지식을 알고 있어야 하고, 실제로 IPC 기법을 구현한 코드를 이해하기는 그 복잡성으로 인해 쉽지않다. - 그러므로 이번 포스팅에서는 각 IPC 기법의 특징과 개념을 이해하는 것에 중점을 두자. 1. File 사용 기법 shared.txt와 같은 파일에 현재 커널 영역의 상태 정보를 기입한다. 통신이 필요한 프로세스의 상태정보를 알기위해 shared.txt 파일을 읽고 확인하다. 이 과정을 반복한다. a) File 사용기법을 잘 사용하지 않는 이유 프로세스에서 통신이 필요할 때마다 매번 shared.txt 파일을 읽어야 한다. 프로세스의 커널 영역의 상태정보가 변할 때마다 해당 파일을 upda.. 2021. 4. 22.
18. 프로세스 - IPC의 개념 1. IPC(Inter-Process Communication) 배경지식 - 운영체제에서 프로세스 간의 직접적인 커뮤니케이션(= 통신) 방법은 존재하지 않는다. - 그러나 프로세스 간의 커뮤니케이션이 필요할 때, 사용할 수 있는 방법을 IPC라고 한다. a) 프로세스간 통신이 불가능한 이유 프로세스는 다른 프로세스의 공간을 접근할 수 없다. 이는 프로세스의 데이터나 코드가 바뀔 가능성을 없애기 위함이다. (프로세스 데이터 변경가능 = 해킹 위험성) b) 프로세스간 통신이 필요한 이유 요즘 CPU는 코어를 적게는 8개, 많게는 64개까지 갖고있다. CPU의 효율/성능을 높이기 위해 여러 코어를 동시에 활용하도록 다수의 프로세스를 동시에 실행시킨다. 다양한 프로세스를 동시에 실행시키는 경우, 프로세스간의 상.. 2021. 4. 21.
17. 프로세스 구조 - 컨텍스트 스위칭(context switching) 1. Context Switching 이란? 어떤 프로그램을 실행하기 위해서는 해당 프로그램을 스케줄러에 등록한다. 스케줄러에 등록된 프로그램을 프로세스 A라고 하자. 프로세스 A의 상태가 ready에서 running으로 전환되면서 소스코드가 읽히면서 프로세스 메모리에 차곡차곡 쌓이게 된다. 이때, 다른 프로그램인 프로세스 B를 실행하려고 한다. 프로세스 A는 block 또는 ready 상태로 변하고, 프로세스 B의 상태가 running으로 바뀌게 된다. 프로세스가 바뀌는 이 과정을 컨텍스트 스위칭이라고 하는데 , 이 과정에서 PC와 SP가 중요한 역할을 한다. 2. 어떤 과정을 거칠까? - 간단한 예제를 이용하여 컨텍스트 스위칭이 어떻게 진행되는지 알아보자. int global_data1; int gl.. 2021. 4. 20.
16. 프로세스 구조(4) - BSS와 Data 1. BSS와 Data 영역 프로세스 구조에서 Data 영역은 BSS와 Data 영역으로 나뉜다. a) BSS - 초기화 값이 없는 전역변수를 의미한다. b) Data - 초기화 값이 있는 전역변수를 의미한다. 2. 코드를 통해서 살펴보자 - 예제 코드 int global_data1; //초기화 값이 없는 변수 int global_data2 = 1; // 초기화 값이 있는 변수 int main() { int *data; data = (int *) malloc(sizeof(int)); *data = 1; printf("%d\n", *data); return 0; } - 프로세스 - 딱 두가지만 확인하자. main 함수 내부에 있는 변수(= 지역변수)는 Stack에 쌓인다. main 함수 밖에 있는 변수(=.. 2021. 4. 15.
15. 프로세스 구조(3) - Heap 1. Heap 이란? Heap은 개발자에 의해 동적으로 할당되는 메모리 영역이다. 파이썬과 같은 최신언어는 동적할당을 요구하지 않는다. 하지만, 컴퓨터의 내부 요소까지 모두 조절할 수 있는 C언어의 경우 동적할당은 필수적이다. a) 어떻게 동적할당을 할까? #include #include int main() { int *data; // 포인터 변수(주소값을 갖고 있다) data = (int *) malloc(sizeof(int)); // C언어에서 int는 32bit = 4bytes의 크기를 갖는다. // data라는 변수는 heap의 메모리 공간에 올라가게 된다. *data = 1;// 포인터 변수의 주소에(= 위치에) 1을 넣는다. printf("%d\n", *data); return 0; } mal.. 2021. 4. 14.
14. 프로세스 구조(2) - Stack - 이전 포스팅에서 배운 프로세스 구조에 대해 복습해보자. 프로세스 구조 text(= code): 소스코드가 올라가는 영역 data: 전역변수, 초기화된 데이터가 올라가는 영역 (프로그램이 종료되면 소멸) stack(= stack frame): 임시 데이터(함수 호출, 로컬변수 등 호출이 완료되면 소멸) heap: 코드에서 동적으로 만들어지는 데이터 (동적 메모리 할당 - 개발자가 직접 할당) 1. 스택에 대한 이해 프로세스에 대한 구조를 이해하기 위해서 필수적으로 이해해야 하는 부분 중 하나는 Stack 자료구조다. 스택은 프로세스의 메모리 영역 중 하나로, 복잡한 함수 호출과정을 효과적으로 처리 및 관리하는 역할을 한다. 스택의 특징은 LIFO(= Last In, First Out)인데, 데이터가 밑.. 2021. 4. 13.
13. 프로세스 구조(1) 프로세스와 컨텍스트 스위칭 스케줄러에 의해 어떤 프로세스에서 다른 프로세스로 바뀌는 과정을 컨텍스트 스위칭이라고 한다. 이 컨텍스트 스위칭을 이해하기 위해서는 프로세스의 구조에 대한 이해가 바탕이 되어야 한다. 지금부터 프로세스의 구조에 대해서 알아보겠다. 1. 프로세스 구조 - 먼저 다음과 같은 프로그램 코드가 있다고 해보자. def func(a, b): return print(a+b) c = 0 c = func(1,2) print(c) 이 코드가 실행되면 컴파일이라는 단계를 거친다. 컴파일은 기계어 또는 바이너리라는 0과 1로 된 언어로써, 컴퓨터가 이해할 수 있도록 번역되는 과정을 의미한다. - 프로세스가 실행된다는 것은 코드가 컴파일 되는 과정을 포함한다. - 그렇다면 컴파일된 코드는 어디로 가는.. 2021. 4. 9.
12. 인터럽트 동작방식 1. 시스템 콜 인터럽트의 작동과정 a) 시스템 콜 인터럽트 시스템 콜을 실행하기 위해서 강제로 코드에 인터럽트 명령을 넣어 CPU에게 실행을 시킨다 - 시스템 콜: 커널에서만 사용할 수 있는 OS 명령어 b) 실제 시스템 콜 코드 eax 레지스터에 시스템 콜 번호를 넣는다. ebx 레지스터에 시스템 콜에 해당하는 인자값(=매개변수)를 넣는다. 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨준다. mov eax, 1 //시스템 콜 번호 = 1 mov ebx, 0 //인자 = 0 int 0x80 //소프트웨어 인터럽트 명령어(= 인터럽트 함수가 담겨있는 주소를 찾기위한 값) c) 시스템 콜 코드를 받고 난 이후 과정 CPU는 사용자모드를 커널모드로 전환한다. IDT(Interrupt Descript.. 2021. 4. 8.