꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

분류 전체보기 199

프로세스간 커뮤니케이션

왜 필요할까? 프로세스들이 서로의 공간에 쉽게 접근하기 어렵습니다. 즉, 다른 프로세스의 주소에 접근하는 방법은 없습니다. 이에 프로세스간 통신을 할 수 있도록 했는데 이러한 기법을 IPC (Inter Process Communication)라 합니다. 프로세스간 통신은 성능을 높이기 위해 여러 프로세스를 동시에 실행할 때 필요합니다. 또한 웹서버로 요청이 올 때마다 프로세스를 따로 만들어서 응답할 때 상태값을 공유할 때도 필요합니다. 코드 간의 접근은 안되지만 저장매체는 공유가 가능합니다. 이러한 것도 IPC 기법이 될 수 있습니다. 하지만 파일을 통한 IPC 기법은 한계가 있습니다. file을 사용하면, 실시간으로 직접 원하는 프로세스에 데이터 전달이 어렵습니다. IPC 기법 종류 1. file 사용..

운영체제 (OS) 2021.04.19

프로세스와 컨텍스트 스위칭

스케줄러가 하나의 응용 프로그램의 A 프로세스를 running 상태로 바꿔주다가 어느순간 B 프로세스를 running 상태로 바꿔주는 것이 컨텍스트 스위칭입니다. 전환할 때 PC와 SP의 데이터를 PCB라는 저장 메모리에 따로 저장합니다. 그 후 컨텍스트 스위칭이 이루어집니다. 다시 이전의 프로세스를 running 시킬 때, PCB 메모리를 확인합니다. 그 값을 CPU 레지스터 값에 덮어씌웁니다. PCB (Process Control Block)에는 Process ID, Register 값, Scheduling Info (Process State), Memory Info (메모리 사이즈 limit) 등이 저장됩니다. 정리해서 PCB는 프로세스가 실행 중인 상태를 캡쳐 / 구조화해서 저장하는 메모리 공간입..

운영체제 (OS) 2021.04.19

프로세스 구조와 스택 오버플로우

DATA 영역은 BSS와 DATA로 구분됩니다. BSS는 초기화되지 않은 전역변수, DATA는 초기값이 있는 전역변수가 저장됩니다. 스택 오버 플로우는 스택 포인터가 스택의 경계를 넘어설 때 일어납니다. (위키백과 참조) 데이터를 저장할 때 해당 데이터가 스택 메모리 사이즈보다 더 많은 스택 메모리를 사용하면서 발생하는 에러 상황입니다. 스택 메모리 사이즈보다 많은 데이터를 저장할 때는 다른 stack의 메모리 공간에 덮어 씌어지면서 저장됩니다. 만약 해커가 자신이 원하는 함수의 위치로 저장시키면서 공격을 할 수 있습니다.

운영체제 (OS) 2021.04.18

프로세스와 컨텍스트 스위칭 - 프로세스 구조

CODE 영역에 컴파일러된 코드가 저장됩니다. DATA 영역에는 변수로 선언된 데이터가 저장됩니다. STACK 영역에는 함수의 return address 값과 인자, 변수 데이터가 저장됩니다. STACK 부분은 계속 저장돼있지 않고 실행이 완료되면 차례로 삭제된 후 CODE 영역에서 다음 코드를 진행합니다. HEAP 영역은 동적으로 생성되는 데이터들이 저장됩니다. 정리를 하면 프로세스는 다음과 같이 구성됩니다. TEXT(CODE): 코드 DATA: 변수/초기화된 데이터 STACK: 임시 데이터(함수 호출, 로컬 변수 등) HEAP: 코드에서 동적으로 만들어지는 데이터 * stack에는 함수가 실행될 때마다 EBP 레지스터에 저장된 주소값이 상단에 들어가게 되는데, 오류가 났을 때 어느 함수에서 문제가 발..

운영체제 (OS) 2021.04.18

프로세스와 스케줄러의 이해 - 인터럽트 내부 동작

시스템 콜 인터럽트 시스템 콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어, CPU에게 실행시켜야 합니다. eax 레지스터에 시스템 콜 번호를 넣고, ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣고, 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨줍니다. 그 후 CPU는 사용자 모드를 커널 모드로 바꿔줍니다. IDT에서 0x80에 해당하는 주소를 찾아서 실행합니다. system_call() 함수에서 eax(시스템 콜 번호)로부터 시스템 콜 번호를 찾아서, 해당 번호에 맞는 시스템 콜 함수로 이동합니다. 해당 시스템 콜 함수를 실행한 후, 다시 커널 모드에서 사용자 모드로 변경하고, 프로세스의 다음 코드를 진행합니다. 인터럽트와 IDT 인터럽트는 미리 정의되어 있어서 각각 번호와 실행..

운영체제 (OS) 2021.04.18

네트워크 용어 정리 (3)

데이터 링크 계층 네트워크 기기 간에 데이터를 전송하고 물리 주소를 결정합니다. 이더넷 (Ethernet) 컴퓨터 네트워크 기술 중 하나로 전 세계의 사무실이나 가정에서 일반적으로 사용되는 랜에서 가장 많이 활용되는 기술 규격입니다. 충돌 (collision) 데이터를 한 번에 하나만 전송할 수 있는 채널에 전송 장치 두 개가 같은 시점에 패킷을 보낼 때 일어나는 데이터 충돌을 말합니다. MAC 주소 (Medium Access Control address) 랜에 사용되는 네트워크 모델인 이더넷의 물리적인 주소로 컴퓨터 네트워크에서 각각의 기기를 구분하기 위해 사용하는 주소입니다. 스위치 (switch, 스위칭 허브) 랜을 구성할 때 사용하는 단말기 간 스위칭 기능이 있는 통신망 중계 장치입니다. 컴퓨터(..

네트워크 2021.04.17

스케줄링 알고리즘 (3) - 인터럽트

인터럽트란 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생해서 처리가 필요할 경우에 CPU에 알려서 처리하는 기술입니다. 만약 block state 단계에 들어있는 응용 프로그램은 wait 작업이 끝나면 CPU에 끝났다고 알려줘야 됩니다. 그러한 역할을 하는 것이 인터럽트입니다. 인터럽트 필요 이유 선점형 스케줄러의 경우 프로세스 running 중에 스케줄러가 이를 중단시키고, 다른 프로세스로 교체하기 위해서 현재 프로세스 실행을 중단시킬 때 사용됩니다. 즉, 스케줄러 코드가 실행되서 현 프로세스 실행을 중단시키는 것이 인터럽트입니다. IO Device에서는 저장매체에서 데이터 처리 완료 시, 프로세스를 block state에서 ready state로 이동됩니다...

운영체제 (OS) 2021.04.17

프로세스와 스케줄러의 이해 (1) - 선점형과 비선점형 스케줄러

선점형 스케줄러 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있습니다. 비선점형 스케줄러 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없습니다. 선점형과 비선점형 스케줄러 차이 비선점형은 프로세스가 자발적으로 blocking 상태로 들어가거나, 실행이 끝났을 때만, 다른 프로세스로 교체 가능합니다. 선점형의 경우, 프로세스 running 중에 스케줄러가 중단시키고, 다른 프로세스로 교체 가능합니다. 비선점형보다 선점형이 쾌적의 스케줄링을 할 수 있습니다. 최근에는 대부분 선점형 스케줄러를 사용하고 있습니다. 알아본 FIFO, SJF, Priority-based는 어떤 프로세스를 먼저 실행시킬지에 대한 알고리즘입니다. 비선점형 스케줄러에 가깝습니다. RoundRobin..

운영체제 (OS) 2021.04.16

스케줄링 알고림 (4) - 프로세스 상태와 스케줄링

CPU는 단순히 Ready State Queue에서 첫 번째로 들어온 프로그램을 가져와서 실행합니다. 해당 프로그램은 Running State Queue에 들어가게 됩니다. 만약 해당 프로그램이 계속해서 실행될 수 있는 프로그램이라면 다시 Ready State Queue에 들어가게 됩니다. 그 후 다시 Ready State Queue에서 두 번째로 들어온 프로그램을 꺼내서 Running State Queue에 들어가게 됩니다. 만약 해당 프로그램이 Wait 상태를 갖게 된다면 Block State Queue에 들어가게 됩니다. Block State Queue에서 Wait 작업이 끝나게 되면 Ready State Queue에 들어가게 됩니다. CPU는 다시 Ready State Queue에서 프로그램을 가..

운영체제 (OS) 2021.04.16

스케줄링 알고리즘 (3) - 프로세스 상태와 스케줄링

멀티 프로그래밍과 Wait 멀티 프로그래밍은 CPU 활용도를 극대화 하는 스케줄링 알고리즘입니다. 저장매체에서 파일을 읽는 것과 같이 소요시간이 긴 작업을 할 때 파일을 불러올 때까지 기다리면서 다른 응용 프로그램을 실행합니다. 프로세스 상태 스케줄러가 A가 Run 상태인 것을 알고 있어야 CPU에 넣어줄 수 있습니다. B와 C도 마찬가지입니다. 즉, 어느시점에 어떤 프로그램을 넣어줄까를 알아야 됩니다. running state: 현재 CPU에서 실행 상태밍과 Wait 멀티 프로그래밍은 CPU 활용도를 극대화 하는 스케줄링 알고리즘입니다. 저장매체에서 파일을 읽는 것과 같이 소요시간이 긴 작업을 할 때 파일을 불러올 때까지 기다리면서 다른 응용 프로그램을 실행합니다. 프로세스 상태 스케줄러가 A가 Run..

운영체제 (OS) 2021.04.16