반응형


현업, IT 기술과 컴퓨터 공학의 이해
· 랙?: 마우스 / 키보드 반응이 느린 경우

  • 스케쥴러가 해결해야하는 이슈
  • 다양하고 복잡한 스케쥴링 알고리즘 필요

· 최근 리눅스 스케쥴러: O(1)와 같이 보다 효율적인 알고리즘 사용 중
· 현업 프로그램은 성능에 민감함

  • 대용량 서비스

· 성능을 위해 꼭 확인해야하는 포인트

  • IO-bound: IO 관련 기능이 주로 사용하는 프로그램
  • CPU-bound: CPU / 메모리를 주로 사용하는 프로그램

수시로 파일등에 접근한다면, 데이터를 메모리에 올려놓고 접근하도록 만드세요.


프로세스 구조
· 프로세스 (process)는 일반적으로 어떻게 구성되어 있을까?

  • text(CODE): 코드
  • data: 변수 / 초기화된 데이터
  • stack: 임시 데이터(함수 호출, 로컬 변수 등)
  • heap: 코드에서 동적으로 만들어지는 데이터



프로세스와 컴퓨터 구조
· PC(Program Counter) + SP(Stack Pointer)

  • PC: 다음 실행할 코드 주소
  • SP: 스택 최상단 주소

· 임베디드 시스템 등에서 동작하는 C 프로그램은 디버깅 시 PC와 SP를 캡쳐해서 확인
참고: ProcessStructure[OS]

  • EFFEh: RET 0003h
  • EFFDh: a = 1
  • EFFCh: b = 2

  • 0003h = func(1, 2)
  • 0004h : c = return
  • 0005h : print(c)



· 파이썬에서 재귀함수 호출이 일정 횟수(약 1000번) 이상이면 에러가 발행하는 이유

  • 고정된 스택 공간 때문



Heap이란?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *data;
    data = (int *) malloc(sizeof(int));
    *data = 1;
    printf("%d\n", *data);
    
    return 0;
}



Java GC와 프로세스 힙
· Java GC (garbage collection)가 필요한 이유

  • 불필요한 객체가 차지하는 힙 공간을 삭제하여, 힙 공간 확보가 필요하기 때문
  • 만약 힙 공간이 부족하면 객체 생성이 불가하고, JAVA와 같은 객체지향 프로그램은 동작하지 않게 됨



컨텍스트 스위칭
· Context Switching, 컨텍스트 스위칭 또는 문맥 교환

  • CPU에 실행할 프로세스를 교체하는 기술

· PC, SP만 바꿔주면, 프로세스 저장상태를 기반으로 실행 가능
참고: ProcessStructure[OS]


Process Control Block (PCB)
· PCB에 다음 프로세스 정보 저장

  • Process ID, Register (PC, SP 등) 등

PCB: 프로세스가 실행중인 상태를 캡쳐 / 구조화해서 저장

· 윈도우 / 맥 등의 태스트 매니저에서 PID 찾아보기
· 리눅스 등에서 프로세스를 제어하는 명령은 PID 기반으로 사용

  • 예: kill -9 PID



컨텍스트 스위칭 세부 동작

  1. 실행 중지할 프로세스 정보를 해당 프로세스의 PCV에 업데이트해서, 메일 메모리에 저장
  2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보(PC, SP)를 CPU의 레지스터에 넣고, 실행



프로세스간 커뮤니케이션 (InterProcess Communication)

  • 프로세스는 다른 프로세스의 공간을 접근할 수 없다.



프로세스간 통신이 필요한가요?

  • 성능을 높이기 위해 여러 프로세스를 만들어서 동시 실행
  • 이 때 프로세스간 상태 확인 및 데이터 송수신이 필요



IPC (InterProcess Communication)
프로세스간에 커뮤니케이션을 해야한다면 어떻게 해야할까?

  • 프로세스간 통신 방법을 제공함
  • IPC: InterProcess Communication

참고: IPC - file[OS]


프로세스간 커뮤니케이션

  • file을 사용하면, 실시간으로 직접 원하는 프로세스에 데이터 전달이 어려움

그래서 보다 다양한 IPC 기법이 있음


실제 프로세스: 리눅스 예

  • 커널 공간은 공유한다.
  • 어떤 프로세스나 0 ~ 4 GB까지의 메모리 주스를 가짐



다양한 IPC 기법

  • IPC: InterProcess Communication
  1. file 사용
  2. Message Queue
  3. Shared Memory
  4. Pipe
  5. Signal
  6. Semaphore
  7. Socket

2번부터는 모두 커널 공간을 사용하는 것


예: 공유 메모리 (shared memory)

  • kernel space에 메모리 공간을 만들고, 해당 공간을 변수처럼 사용하는 방식



C 언어를 익혀야 하는 이유

  • JAVA, python 등은 사용자가 더 쉽게 개발할 수 있도록 만든 언어
  • 그만큼 컴퓨터 동작 이해가 부족해도 프로그램 구현이 가능
  • 현업에서도 C++ 등 언어를 사용하는 경우가 많음
  • C 언어를 익혀서 프로그래밍을 하려면 IPC함수, 메모리 직접 제어 기능 등을 이해하고 사용해야 하므로,
  • C 언어를 모르는 개발자보다 더 깊은 레벨의 이해가 가능함



정리
· 여러 프로세스 동시 실행을 통한 성능 개선, 복잡한 프로그램을 위해 프로세스간 통신 필요
· 프로세스간 공간이 분리되어 있음
· 프로세스간 통신을 위한 특별한 기법 필요

  • IPC (InterProcess Communication)

· 대부분의 IPC 기법은 결국 커널 공간을 활용하는 것임

  • 이유: 커널 공간은 공유되기 때문



반응형

+ Recent posts