
가상 메모리(Virtual Memory System) 개념 - 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기가 한계가 있음 EX. 리눅스는 하나의 프로세스가 4GB, 통상 메모리는 8GB, 16GB - 폰노미만 구조 기반이므로 코드는 메모리에 반드시 있어야 한다. 가상 메모리가 필요한 이유 - 하나의 프로세스만 실행 가능한 시스템(배치 처리 시스템 등) 1. 프로그램을 메모리로 로드(load) 2. 프로세스 실행 3. 프로세스 종료(메모리 해제) - 여러 프로세스 동시 실행 시스템 1. 메모리 용량 부족 이슈 2. 프로세스 메모리 영역간에 침범 이슈 가상 메모리 - 가상 메모리: 메모리가 실제 메모리보다 많아 보이게 하는 기술 실제 사용하는 메모리는 작다는 점에 착안해서 고안된 기술 프로..

동기화(Synchronization) 이슈 동기화 : 작업들 사이에 실행 시기를 맞추는 것 여러 스레드가 동일한 자원(데이터) 접근시 동기화 이슈 발생 ex. 프로세스 안에 스레드 여러개, 스레드들은 모픈 프로세스에 있는 데이터 공유 스레드 A가 데이터값을 바꾸고 다른 스레드들이 읽을 수 있다. 스레드들은 실행 순서는 정해져 있지 않고 스케줄러가 그에 맞춰 정해지게 된다. 순서가 정해져 있지 않다보니 비정상 동작을 하게 된다. → 동기화 이슈라고 한다. (Synchronization) 동기화 이슈는 관리(스레드 관리)가 필요하다. 디버깅하기 쉽지 않다. 동기화(Synchronization) 이슈 해결 방안 - 동기화 간에 실행 시기를 맞춰야 한다. - Mutual exclusion (상호 배제) - 쓰레..

Thread 개념 프로세스는 프로세스 간에 각 프로세스의 데이트 접근 불가해서 IPC를 사용했어야 했다. 스레드는 하나의 프로세스에 여러개의 스레드 생성가능 ( 다른 프로세스에서 스레드끼리는 공유x ) 스레드들은 동시에 실행가능. 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능해서 IPC 사용 x - Thread는 각기 실행이 가능한 stack 존재 스레드는 stack영역을 가지고 있는 함수라고 생각하면 된다. 각 스레드를 위한 stack 공간을 별도로 생성, 스레드 별로 PC 레지스터도 따로 존재한다. stack 영역을 제외한 영역은 공유 Multi Thread Code, Data, Heap 영역은 공유 스레드를 위한 stack 영역만 별도로 가지고 있다. 멀티 프로세싱과 Thread 멀티..

파이프 (pipe) - 기본 파이프는 단방향 통신 - fork() 로 자식 프로세스 만들었을 때, 부모와 자식간의 통신 가능 → 부모 프로세스에서 fd[0]으로 read 할 수 없고 자식 프로세스에서 fd[1]으로 write 할 수 없다. → 자식에서 부모로 갈 수 없다. → 데이터는 커널 공간에 있다. → 파이프는 pipe(fd) fd 인자를 정수 배열로 줬음 (fd[2] => fd[0], fd[1] 이 있는 상태) fd 에 파이프가 정상적으로 생성되면 특정한 주소값을 2개 준다. fork() 실행 : 프로세스 2개 생김. fd 주소값 변하지 않는다. 부모프로세스에서 데이터를 쓴다.(write), fd[1] 써야하고, 자식프로세스에서는read함수를 쓰고 ,fd[0] 쓰고 공란 buf 변수를 사용 → 부..

InterProcess Communication (IPC) : 프로세스 커뮤니케이션 기법 프로세스간 커뮤니케이션은 원칙적으로 금지되어있다. → 프로세스의 코드가 다른 프로세스의 코드나 데이터를 바꿀 수 있는 방법 x → 프로세스는 다른 프로세스 공간에 접근할 수 없다. 그래서 프로세스 간에 커뮤니케이션을 해야될 필요가 있어 IPC 기법을 제공하는 것이다. → 동시에 실행된 결과들을 특정 프로세스가 모아서 정리해야 되고 각각의 프로세스간 통신 필요한 경우 있다. ex. fork () 시스템 콜 → fork 함수로 프로세스 자신을 복사해서 새로운 프로세스로 만들 수 있다. 기본적으로 프로세스 생성시, 리눅스(유닉스 계열)에서는 최초 프로세스를 제외하고는, fork() 시스템콜을 사용해 부모 프로세스를 복사하..

컨텍스트 스위칭 동작 원리 스케쥴러가 프로세스 A에서 B로 바꿀 때 PCB라는 별도의 저장 메모리 공간을 만들어서 프로세스 A의 PC(Program Counter), SP(Stack Pointer) 값을 저장, A는 ready or block 상태로 변경되고 B 실행 PCB ( Process Control(Context) Block ) 1. Porcess ID 2. Register 값 (PC, SP 등) 3. Scheduling Info (Process State) : 지금 프로세스 상태가 ready, block, running 인지 4. Memory Info(메모리 사이즈 limit) → PCB 는 프로세스가 실행중인 상태를 캡쳐/ 구조화해서 저장 ( PCB 는 프로세스의 상태를 저장하는 데이터 구조로..

프로세스와 컨텍스트 스위칭 컨텍스트 스위칭이란? : 프로세스 A가 실행하다가 어느순간 스케쥴러가 프로세스 B로 변경하는데 이런 바꿔주는 매커니즘을 컨텍스트 스위칭이라 한다. 프로세스는 일반적으로 어떻게 구성되어 있을까? text(CODE): 컴파일된 소스 코드가 저장 data: 프로그램 실행에 필요한 데이터가 저장되며, 주로 소스코드에서 선언된 전역변수가 저장 stack: 임시 데이터(함수 호출, 로컬 변수 등)가 저장 heap: 함수가 동작하기 위해서 쓴 자료구조, 함수 실행에 필요한 자료를 저장 Program Counter + Stack Pointer 다음 실행할 명령어의 주소를 가지고 있는 레지스터 : PC(Program Counter) 함수가 실행될때 가장 최상단 주소를 가르키는 레지스터 : St..

시스템 콜 인터럽트 시스템 콜을 실행하기 위해서는 강제로 코드에 인터럽트 명령을 넣어, CPU에게 실행시켜야 한다. - 시스템 콜 실제 코드 eax 레지스터에 시스템 콜 번호를 넣는다. ( 시스템 콜은 각각의 번호가 있음 ) ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣는다. 소프트웨어 인터럽트 명령을 호출하면서 0x80(인터럽트 번호 - 시스템콜은 0x80 으로 정해둠) 값을 넘겨 준다. cf ) 무조건 마지막에 CPU 제공하는 op code 중 int 명령어 들어감 cf ) 다른 인터럽트와 다르게 ( 원래 인터럽트는 외부에서 코드와 별개로 실행) 코드안에서 강제로 실행 인터럽트와 시스템 콜 ● 시스템콜 인터럽트 명령을 호출하면서 0x80(인터럽트 값) 값을 넘겨줌 1. CPU는 사용자 모드를 ..