현업, 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
컨텍스트 스위칭 세부 동작
- 실행 중지할 프로세스 정보를 해당 프로세스의 PCV에 업데이트해서, 메일 메모리에 저장
- 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보(PC, SP)를 CPU의 레지스터에 넣고, 실행
프로세스간 커뮤니케이션 (InterProcess Communication)
- 프로세스는 다른 프로세스의 공간을 접근할 수 없다.
프로세스간 통신이 필요한가요?
- 성능을 높이기 위해 여러 프로세스를 만들어서 동시 실행
- 이 때 프로세스간 상태 확인 및 데이터 송수신이 필요
IPC (InterProcess Communication)
프로세스간에 커뮤니케이션을 해야한다면 어떻게 해야할까?
- 프로세스간 통신 방법을 제공함
- IPC: InterProcess Communication
참고: IPC - file[OS]
프로세스간 커뮤니케이션
- file을 사용하면, 실시간으로 직접 원하는 프로세스에 데이터 전달이 어려움
그래서 보다 다양한 IPC 기법이 있음
실제 프로세스: 리눅스 예
- 커널 공간은 공유한다.
- 어떤 프로세스나 0 ~ 4 GB까지의 메모리 주스를 가짐
다양한 IPC 기법
- IPC: InterProcess Communication
- file 사용
- Message Queue
- Shared Memory
- Pipe
- Signal
- Semaphore
- Socket
2번부터는 모두 커널 공간을 사용하는 것
예: 공유 메모리 (shared memory)
- kernel space에 메모리 공간을 만들고, 해당 공간을 변수처럼 사용하는 방식
C 언어를 익혀야 하는 이유
- JAVA, python 등은 사용자가 더 쉽게 개발할 수 있도록 만든 언어
- 그만큼 컴퓨터 동작 이해가 부족해도 프로그램 구현이 가능
- 현업에서도 C++ 등 언어를 사용하는 경우가 많음
- C 언어를 익혀서 프로그래밍을 하려면 IPC함수, 메모리 직접 제어 기능 등을 이해하고 사용해야 하므로,
- C 언어를 모르는 개발자보다 더 깊은 레벨의 이해가 가능함
정리
· 여러 프로세스 동시 실행을 통한 성능 개선, 복잡한 프로그램을 위해 프로세스간 통신 필요
· 프로세스간 공간이 분리되어 있음
· 프로세스간 통신을 위한 특별한 기법 필요
- IPC (InterProcess Communication)
· 대부분의 IPC 기법은 결국 커널 공간을 활용하는 것임
- 이유: 커널 공간은 공유되기 때문
'cs > computer-science-basic' 카테고리의 다른 글
기술면접 - 8. Mutex와 세마포어 (Semaphore) (0) | 2022.03.23 |
---|---|
기술면접 - 7. 스레드 (Thread)와 동기화 (Synchronization) (0) | 2022.03.23 |
기술면접 - 5. 스케쥴러와 프로세스 상태 (0) | 2022.03.23 |
기술면접 - 4. 프로세스 (process) (0) | 2022.03.23 |
기술면접 - 3. 응용 프로그램 (0) | 2022.03.23 |