📌 디스패처

디스패처는 CPU 스케줄러에 의해 선택된 프로세스를 실행 상태( Running )로 전환하는 역할을 수행한다.
즉, 준비( Ready ) 큐에 있는 프로세스가 CPU를 할당받아 실행되는 과정을 담당한다.

 

프로세스가 준비 상태에서 실행 상태로 전환되는 것을 '디스패치'라 한다.

📌주요 기능

1️⃣ 문맥 복원( Context Restoration )

  • CPU가 이전에 다른 프로세스를 실행 중이었다면, 새롭게 실행될 프로세스의 PCB를 로드한다.

2️⃣ CPU 모드 전환( User Mode 전환 )

  • 운영체제는 일반적으로 '커널 모드'에서 실행되지만, 일반 프로세스는 '사용자 모드'에서 실행된다.
  • 디스패처는 CPU 모드를 커널 모드에서 사용자 모드( User Mode )로 전환하여 프로세스를 실행할 수 있도록 한다.

3️⃣ 프로그램 카운터( PC, Program Counter ) 설정

  • 실행할 프로세스의 PCB에서 프로그램 카운터의 값을 읽어와 CPU에 설정해준다.
  • 프로그램 카운터는 프로세스가 마지막으로 실행되던 명령어의 위치를 가리키는 레지스터다.

4️⃣ 프로세스 실행( CPU 제어권 넘김 )

  • CPU가 해당 프로세스를 실행하도록 제어권을 넘긴다.
  • 프로세스가 실행 상태로 전환된다.

📌 디스패처의 동작 과정

🔹 단계 1 : 스케줄러가 실행할 프로세스 선택

  • 운영체제의 CPU 스케줄러가 준비 큐에서 실행할 프로세스를 선택한다.

🔹 단계 2 : 문맥( Context ) 복원 및 CPU 설정

  1. 디스패처가 선택된 프로세스의 PCB 정보를 로드
    • PCB에서 CPU 레지스터, 프로그램 카운터, 스택 포인터 값을 복원
    • 이전에 수행하던 명령어 위치를 CPU에 설정
  2. CPU 모드를 커널 모드에서 사용자 모드로 전환

🔹 단계 3 : 실행 상태로 전환 및 프로세스 시작

  1. 디스패처가 CPU의 제어권을 프로세스에 넘긴다.
  2. 프로세스가 실행( Running ) 상태로 전환되어 명령어 수행 시작

✅ 이제 프로세스가 CPU를 점유하고 실행을 시작한다고 볼 수 있다.

'CS' 카테고리의 다른 글

[CS] 빅 엔디안, 리틀 엔디안  (0) 2025.02.23
[CS] sleep 함수  (0) 2025.02.11
[CS] 디자인 패턴  (0) 2024.11.11
[CS] IP 주소의 체계, 사설망, 공인망  (0) 2024.10.07
[CS] 랜카드, MAC 주소  (0) 2024.10.02
프로세스는 실행되는 동안 CPU 스케줄링, I/O 대기, 실행 중단 등의 다양한 상황을 거친다.
운영체제는 이러한 상황을 효과적으로 관리하기 위해 프로세스의 상태를 PCB를 통해 인식하고 관리한다.

 

📌  프로세스의 주요 상태

운영체제마다 다소 차이는 있지만, 일반적으로 프로세스는 다음과 같은 상태를 가진다.

 

1️⃣ 생성 상태( New )

  • 프로세스가 생성되고, 이제 막 메모리에 적재되어 PCB를 할당 받은 상태를 말한다.
  • 생성 상태를 거쳐, 실행 준비가 완료된 프로세스는 곧바로 실행되지는 않고, 준비 상태가 되어 CPU의 할당을 기다린다.

2️⃣ 준비 상태( Ready )

  • CPU를 할당받아 실행할 수 있지만, 아직 할당받지 못한 상태를 말한다.
  • 여러개의 프로세스가 동시에 준비 상태가 될 수 있고, 운영체제의 스케줄러( Scheduler )가 이들 중 하나를 선택하여 실행한다.

3️⃣ 실행 상태( Running )

  • CPU를 할당받아 실행 중인 상태를 말한다.
  • 실행 상태인 프로세스는 할당된 일정 시간 동안만 CPU를 사용할 수 있다.
  • 할당된 시간을 모두 사용하면 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용하면 입출력 작업이 끝날때까지 대기 상태가 된다.

4️⃣ 대기 상태( Waiting / Blocked )

  • 프로세스가 실행되던 중 I/O 작업( 예: 디스크 읽기, 네트워크 요청 )이 발생하거나 특정 이벤트( 예: 동기화 변수 )가 발생하면 대기하는 상태를 말한다.
  • 입출력 완료 인터럽트를 받을 때까지 대기하고, 이 동안은 CPU를 점유하지 않는다.
  • 입출력 완료 인터럽트를 받아 I/O 요청이 완료되면 다시 준비 상태가 된다.

5️⃣ 종료 상태( Terminated )

  • 프로세스가 실행을 완료하거나, 오류 또는 강제 종료에 의해 더 이상 실행되지 않는 상태를 말한다.
  • 운영체제는 종료된 프로세스의 메모리 및 리소스를 해제하고, PCB를 정리한다.

📌 프로세스 상태 전이( State Transition )

프로세스는 실행 중 다음과 같은 상태 변화를 겪는다.

 

1️⃣ 생성 ▶ 준비 ( New ▶ Ready )

  • 새로운 프로세스가 생성되면, 실행을 위해 준비 상태( Ready )로 이동한다.

2️⃣ 준비 ▶ 실행 ( Ready ▶ Running )

  • CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 선택하여 CPU를 할당하면 실행 상태( Running )로 이동한다.

3️⃣ 실행 ▶ 준비 ( Running ▶ Ready )

  • 프로세스가 CPU 시간을 초과했거나, 우선순위가 높은 다른 프로세스가 스케줄링될 경우 다시 준비 상태( Ready )로 이동한다.

4️⃣ 실행 ▶ 대기 ( Running ▶ Waiting )

  • 프로세스가 I/O 요청으로 인해 CPU 사용을 중단해야 할 경우, 대기 상태( Waiting )로 이동한다.

5️⃣ 대기 ▶ 준비 ( Waiting ▶ Ready )

  • 대기 상태에 있던 프로세스가 I/O 작업이 완료되거나 필요한 이벤트가 발생하면, 다시 준비 상태( Ready )로 이동한다.

6️⃣ 실행 ▶ 종료 ( Running ▶ Terminated )

  • 프로세스가 정상적으로 실행을 마치거나, 오류 또는 강제 종료되면 종료 상태( Terminated )로 이동한다.

📌 추가적인 프로세스 상태

중단 상태( Suspended )

프로세스가 일시적으로 메모리에서 제거되고 보조 저장장치( 디스크 등 )에 저장된 상태를 말한다.
  • 메모리에서 프로세스가 제거된 상태( 보조 기억장치로 스왑됨 )
  • CPU를 포함한 모든 자원을 사용하지 않는다.
  • 운영체제가 직접 상태를 변경한다.

중단 상태( Suspended ) 상태가 필요한 이유

일반적인 프로세스 상태( Running, Ready, Waiting )와 달리, Suspended 상태는 프로세스가 '실행할 수 없는 상황'을 말한다. 운영체제는 아래와 같은 이유로 프로세스를 중단 상태로 전환한다.

 

1️⃣ 메모리 부족( Swapping, 스왑 아웃 )

  • RAM이 부족할 때, 운영체제는 일부 프로세스를 디스크로 옮겨 메모리를 확보한다.
  • 보통은 오랫동안 실행되지 않은 프로세스가 먼저 중단된다.
  • 메모리가 다시 확보되면, 프로세스는 디스크에서 다시 RAM으로 복원( Swapping In )되어 Ready 상태로 변경된다.

2️⃣ 외부 자원의 문제( I/O 장치 사용 불가 )

  • 프로세스가 특정 하드웨어( 프린터, 네트워크, 디스크 등 )를 기다리고 있는데, 장치가 사용할 수 없는 상태라면 운영체제는 해당 프로세스를 Suspended 상태로 변경한다.
  • 자원이 사용 가능해지면 다시 Ready 상태로 복귀한다.
    • 프린터 대기열에 있는 작업이, 프린터가 오프라인 상태라서 처리되지 못하는 경우
    • 네트워크가 끊겨 다운로드 중이던 프로그램이 일시 정지 되는 경우

 

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 스레드  (0) 2025.02.11
[CS] 프로세스 계층 구조  (0) 2025.02.11
[CS] 프로세스의 메모리 영역  (0) 2025.02.10
[CS] 문맥 교환  (0) 2025.02.10
[CS] 프로세스 개요  (0) 2025.02.10
프로세스가 생성되면 커널 영역에 PCB가 생성된다.
사용자 영역에 프로세스는 어떻게 배치될까?

 


하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.

 

1️⃣ 코드( Code ) 영역 

  • 텍스트( Text )영역이라고도 부른다.
  • 실행할 프로그램의 기계어 코드( 명령어 )가 저장되는 공간이다.
  • 실행 파일에서 .text 섹션에 해당하고, 읽기 전용 속성을 가진다.

2️⃣ 데이터( Data ) 영역

  • 전역 변수와 정적 변수가 저장되는 공간이다.
  • 실행 파일에서 .data와 .bss 섹션에 해당한다.

다시 두 가지 영역으로 나뉜다.

 1. 초기화된 데이터( Initialized Data )영역

  • 초기값이 있는 전역 변수와 정적 변수가 저장된다.
  • 실행 파일에서 .data 섹션에 해당한다.

 2. 초기화되지 않은 데이터( Uninitialized Data )영역 ( BSS: Block Started by Symbol )

  • 초기화되지 않은 전역 변수와 정적 변수가 저장된다.
  • 실행 파일에서 .bss 섹션에 해당하고, 실행 시 0으로 초기화 된다.

코드 영역과 데이터 영역은 그 크기가 변하지 않는다. 

그렇기에 크기가 고정된 영역이라 하여 '정적 할당 영역'이라고도 부른다.

 

3️⃣ 힙( Heap )영역

  • 동적 할당( malloc, new 등)에 의해 할당되는 메모리가 저장되는 공간이다.
  • 프로그램이 종료되거나 명시적으로 해제( free, delete 등 )하지 않으면 메모리 누수가 발생할 수 있다.

4️⃣ 스택( Stack )영역

  • 함수 호출 시 생성되는 지역 변수, 매개변수, 리턴 주소 등이 저장되는 공간이다.
  • 함수가 호출될 때마다 새로운 스택 프레임( Stack Frame )이 생성되고, 함수가 종료되면 해당 스택 프레임이 제거 된다.
  • 메모리 할당과 해제가 자동으로 이루어져서 빠르지만, 스택 크기를 초과하면 스택 오버플로우( Stack Overflow )가 발생할 수 있다.

힙 영역과 스택 영역은 실시간으로 그 크기가 변할 수 있기 때문에 '동적 할당 영역'이라고 부른다.

일반적으로 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고,

스택 영역은 높은 주소에서 낮은 주소로 할당된다.

 

메모리 구조 (일반적인 프로세스 메모리 배치)
--------------------------------------
 높은 주소 (High Address)
--------------------------------------
 |   커널 영역 (Kernel Space)         |
--------------------------------------
 |   스택 (Stack)                     |
 |   - 지역 변수, 함수 호출 정보      |
 |   - 높은 주소 → 낮은 주소로 성장   |
--------------------------------------
 |   ↓ 빈 공간 (Unused Space) ↓       |  ← 힙과 스택 사이 여유 공간
--------------------------------------
 |   힙 (Heap)                        |
 |   - 동적 할당된 메모리 영역        |
 |   - 낮은 주소 → 높은 주소로 성장   |
--------------------------------------
 |   데이터 (Data) 영역               |
 | - 초기화된/초기화되지 않은 전역변수|
--------------------------------------
 |   코드 (Code / Text) 영역          |
 |   - 실행 코드(기계어) 저장         |
--------------------------------------
 낮은 주소 (Low Address)

 

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 프로세스 계층 구조  (0) 2025.02.11
[CS] 프로세스 상태  (0) 2025.02.11
[CS] 문맥 교환  (0) 2025.02.10
[CS] 프로세스 개요  (0) 2025.02.10
[CS] C 언어 컴파일 과정  (0) 2025.02.10

문맥 교환

운영체제가 현재 실행 중인 프로세스의 실행 상태( =문맥 )를 PCB에 저장하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 가져와 복원하는 과정을 말한다.

 

📌 운영체제는 문맥 전환을 통해 CPU를 여러 프로세스가 공유하도록 관리한다.


📌 문맥 교환의 과정

1️⃣ 현재 실행중인 프로세스의 PCB 저장

  • 실행 중이던 프로세스의 레지스터 값, 프로그램 카운터 값, 상태 정보 등을 PCB에 저장
  • 저장된 PCB는 프로세스 테이블에 보관된다.

2️⃣ 새로운 프로세스의 PCB 로드

  • 실행할 프로세스의 PCB 정보를 읽어온다.
  • 해당 프로세스의 프로그램 카운터와 레지스터 값을 복원한다.

3️⃣ CPU 제어권을 새로운 프로세스에 넘김

  • 새로운 프로세스가 실행되도록 CPU를 할당한다.
  • 문맥 교환 완료 후, 새로운 프로세스가 기존에 실행되던 위치부터 실행을 재개한다.

📌 문맥 교환이 발생하는 경우

1️⃣ 프로세스가 실행 시간을 초과했을 때 ( 타이머 인터럽트 )

  • 라운드 로빈 스케줄링 방식에서 타임 슬라이스 시간이 끝나면 현재 프로세스의 PCB를 저장하고, 새로운 프로세스를 실행하는 문맥 교환이 발생한다.

2️⃣ 프로세스가 I/O 작업을 요청할 때

  • 실행 중인 프로세스가 입출력 작업을 기다려야 하는 경우
  • 현재 프로세스의 PCB를 저장하고, 다른 준비 상태의 프로세스를 실행하며 문맥 교환 발생

3️⃣ 높은 우선순위의 프로세스가 실행될 때

  • 현재 실행중인 프로세스보다 우선순위가 높은 프로세스가 준비 상태에 있는 경우
  • 현재 프로세스 PCB 저장, 우선순위 높은 프로세스 실행하면서 문맥 교환 발생

4️⃣ 프로세스가 종료될 때

  • 현재 실행중인 프로세스가 실행을 마치면, PCB가 삭제되고 새로운 프로세스가 실행되며 문맥 교환 발생

📌 문맥 교환의 비용

문맥 교환은 앞서 언급한대로, 운영체제가 실행중인 프로세스에서 다른 프로세스로 전환할 때 발생하는 작업이다.
이 과정에서 발생하는 비용은 다음과 같은 요소들로 구성된다.

 

1️⃣ 레지스터 저장 및 복원

  • cpu가 실행 중인 프로세스의 레지스터 값( PC, SP, 일반 레지스터 등 )을 저장하고, 새로운 프로세스의 레지스터 값으로 복원해야 한다.
  • 당연하게도 레지스터 수가 많을수록 저장 및 복원의 비용이 증가한다.

2️⃣ 캐시 미스( Cache Miss ) 증가

  • CPU 캐시는 현재 실행 중인 프로세스의 데이터들로 채워져 있다.
  • 다른 프로세스로 전환이 되면 기존 캐시 데이터가 무효화되거나 덮어씌워지면서 '캐시 미스'가 발생할 확률이 높아진다.
  • 캐시 미스는 메모리 접근 속도를 저하시키기 때문에 전체 성능에 영향을 준다.

3️⃣ 커널 모드 전환 비용

  • 문맥 교환은 보통 운영체제 커널에서 수행된다.
  • 일반적으로 유저 모드 ➡️ 커널 모드 ➡️ 유저 모드 전환이 필요하며, 이 과정에서 추가적인 오버헤드가 발생한다.

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 프로세스 계층 구조  (0) 2025.02.11
[CS] 프로세스 상태  (0) 2025.02.11
[CS] 프로세스의 메모리 영역  (0) 2025.02.10
[CS] 프로세스 개요  (0) 2025.02.10
[CS] C 언어 컴파일 과정  (0) 2025.02.10

프로세스

실행 중인 프로그램을 의미.
사용자가 어떤 프로그램을 실행하면 OS가 해당 프로그램을 메모리에 적재하고 CPU를 할당하여 실행하는데,
이 실행 단위를 프로세스라 한다.

📌 프로세스의 종류

포그라운드 프로세스

사용자가 직접 실행하고 인터페이스를 통해 상호작용하는 프로세스
예 : 게임, 웹 브라우저 등

백그라운드 프로세스

사용자가 직접 조작하지 않고 시스템 내부에서 실행되는 프로세스
예: 백신 프로그램, 클라우드 동기화 프로그램 등

 

백그라운드 프로세스는 유닉스 체계의 운영체제에서는 '데몬' 이라 하고,

윈도우 운영체제에서는 서비스라 한다.


📌 프로세스 제어 블록 ( PCB : Process Control Block ) 

운영체제가 각 프로세스를 관리하기 위해 유지하는 데이터 구조
운영체제는 프로세스를 실행, 일시 정지, 재개, 종료 등의 작업을 수행하는데, 이때 프로세스의 상태 및 중요 정보를 저장하는 것이 프로세스 제어 블록 즉, PCB 다

 

PCB커널 영역생성되며, 프로세스 생성 시 만들어지고 실행이 끝나면 폐기된다.

다시 말해 '새로운 프로세스가 생성되었다'는 말은 '운영체제가 PCB를 생성했다'는 말과 같고,

'프로세스가 종료되었다'는 말은 '운영체제가 해당 PCB를 폐기했다'는 말과 같다.

 

📌 프로세스 제어 블록의 역할

  • 프로세스 식별 ( 프로세스마다 고유한 PID를 할당하여 구별 )
  • 프로세스 상태 ( 실행 중, 준비 상태, 대기 상태 등 프로세스의 현재 상태를 저장 )
  • 레지스터 값 ( 프로세스가 사용하고 있었던 레지스터 값 ( 대표적으로 프로그램 카운터 ) )
  • CPU 스케줄링 정보 ( 우선순위, 스케줄링 큐 정보 등 CPU 할당을 위한 데이터 유지 )
  • 메모리 관리 정보 ( 프로세스가 사용하는 메모리 영역 ( 코드, 데이터, 스택, 힙 등 ) 정보, 페이지 테이블, 베이스 레지스터, 한계 레지스터 등 )
  • 입출력 정보 ( 프로세스가 사용 중인 입출력 장치, 열린 파일 목록 등 )

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 프로세스 계층 구조  (0) 2025.02.11
[CS] 프로세스 상태  (0) 2025.02.11
[CS] 프로세스의 메모리 영역  (0) 2025.02.10
[CS] 문맥 교환  (0) 2025.02.10
[CS] C 언어 컴파일 과정  (0) 2025.02.10

1. 소스 코드 

  • 우리가 작성한 c 코드는 보통 .c 확장자를 가진 파일로 저장된다.
  • 예: main.c

2. 전처리 과정 ( Preprocessing )

명령어 : gcc -E main.c -o main.i

 

전처리 과정은 소스 코드를 처리하며 다음 작업을 수행한다.    

  • 매크로 치환 : #define 으로 정의된 매크로를 실제 값으로 치환
  • 헤더 파일 포함 : #include로 포함된 헤더 파일의 내용을 코드에 삽입
  • 조건부 컴파일 : #if, #ifdef, #ifndef 등 조건부 컴파일 지시자를 처리.
  • 주석 제거 : 코드의 모든 주석을 삭제

결과물 : 전처리된 소스 코드가 저장된 .i 파일


3. 컴파일 과정 ( Compliation )

명령어 : gcc -S main.i -o main.s

 

컴파일러는 전처리된 코드를 어셈블리 코드로 변환한다.

결과물 : 어셈블리 코드가 저장된 .s 파일


4. 어셈블 과정 ( Assembly )

명령어 : gcc -c main.s -o main.o

 

어셈블러는 어셈블리 코드를 목적 파일로 변환한다.


5. 링킹 과정 ( Linking )

명령어 : gcc main.o -o main

 

링커는 여러 개의 목적 파일과 라이브러리를 결합하여 최종 실행 파일을 생성한다.

  • c 표준 라이브러리 ( libc )와 같은 필요한 라이브러리 포함
  • 함수 호출에 대한 주소를 결정하고 실제로 연결

결과물 : 실행 가능한 파일 ( main 또는 main.exe )


컴파일 과정 요약

 

  • main.c → 전처리 → main.i
  • main.i → 컴파일 → main.s
  • main.s → 어셈블 → main.o (목적 파일)
  • main.o → 링크 → main (실행 파일)

 

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 프로세스 계층 구조  (0) 2025.02.11
[CS] 프로세스 상태  (0) 2025.02.11
[CS] 프로세스의 메모리 영역  (0) 2025.02.10
[CS] 문맥 교환  (0) 2025.02.10
[CS] 프로세스 개요  (0) 2025.02.10

일종의 설계 기법이며, 설계 방법이다.

 

목적

SW 재사용성, 호환성, 유지 보수성을 보장

 

특징

디자인 패턴은 아이디어고, 특정한 구현이 아니다.

프로젝트에 항상 적용해야 하는 것은 아니지만, 추후 재사용, 호환, 유지 보수시 발생하는

문제 해결을 예방하기 위해 패턴을 만들어 둔 것이라고 생각하면 된다.

 

분류

1. 생성 패턴 ( Creational ) : 객체의 생성 방식 결정

 Class-creational patterns, Object-creational patterns

 

2. 구조 패턴 ( Structural ) : 객체간의 관계를 조직

 

3. 행위 패턴 ( Behavioral ) : 객체의 행위를 조직, 관리, 연합

 

'CS' 카테고리의 다른 글

[CS] sleep 함수  (0) 2025.02.11
[CS] 디스패처( Dispatcher )  (0) 2025.02.11
[CS] IP 주소의 체계, 사설망, 공인망  (0) 2024.10.07
[CS] 랜카드, MAC 주소  (0) 2024.10.02
[CS] 웹서버와 게임서버  (0) 2024.08.25

IP 주소

네트워크에서 통신을 위한 일련의 규칙이자 약속( 통신규약 )들이 존재하며, 이를 프로토콜이라고 부른다.

그 중 인터넷 통신을 위한 프로토콜도 존재하는데 대표적인 것이 바로 IP다.

IP는 Internet Protocol의 약자로 인터넷 통신을 위한 일련의 통신 규칙들을 지칭한다.

IP기반 네트워크 환경에서 단말장치들이 서로를 인식하고 통신을 하기 위해 지정되는 주소체계를 IP 주소라고 부른다.

 

기본적으로 네트워크에 연결되는 단말장치에 탑재된 하나의 랜카드는 하나의 IP주소를 가진다.

유일한 값을 가지는 MAC 주소와는 달리 IP 주소는 보통 랜카드에 연결되는 네트워크에 따라 주소 값이 동적으로 변경된다. 

 

IPv4와 IPv6 주소 체계

IPv4 주소의 길이는 총 32bit로 총 2^32 = 4,294,967,296 개의 IP 주소를 표현할 수 있다.

네트워크 규모가 커질수록 단말장치의 수는 점점 늘어나고, 이에 따라 IP 주소의 고갈을 염려해야한다.

그래서 등장한 것이 바로 IPv6다.

 

현재 사용하는 IP 주소는 32 bit 길이의 IPv4인 반면에 IPv6는 12 bit 길이로 IP 주소의 고갈 문제를 해결할 수 있다.

하지만 당장 IPv6로 적용하기는 대부분의 통신 장비들이 IPv4 주소 기반으로 제작되어 운용중이라 IPv6기반의 장비로 교체하거나 적용하기는 어렵다.

 

앞서 언급한 것처럼 IPv6로 주소체계를 바꾸기에는 어려우므로 IP 주소를 보다 효율적으로 사용할 필요가 있다.

그 방법 중 하나가 네트워크를 사설망과 공인망으로 구분하고, 할당되는 IP 주소를 달리해 사용하는 것이다.

 

사설망과 공인망

공인망( = 공중망, 외부망 )은 사용자가 세계 어디에 있더라도 접속할 수 있는 네트워크 즉, 인터넷이다. 

공인망에서 쓰이는 IP 주소를 공인 IP라고 부르고, 인터넷상에서 유일한 IP 주소 값을 가진다.

 

사설망( = 내무방 )은 인터넷과 달리 특정 조직이나 기관 내에 독립적으로 사용하는 네트워크를 말한다. 인트라넷이 여기에 해당한다. 사설망에서 적용되는 IP 주소를 사설 IP라고 부른다. 사설 IP는 인터넷과 같은 외부망에서는 사용할 수 없고, 내부 네트워크에서만 사용할 수 있다. 외부 접속 목적이 아니라 사설망 내부 통신에서만 활용되기 때문에 다른 사설망에서 중복해서 사용해도 된다.

 

사설망과 공인망 사이의 통신 ( NAT )

사설망이라고 해서 인터넷을 이용할 수 없는 것은 아니다. 사설망과 공인망 사이에 망을 중계하는 역할을 하는 네트워크 장비를 하나 두고, 이 네트워크 장비에서 사설망의 IP 주소를 공인 IP 주소로 변경해 데이터를 중계하면 사설망에서도 인터넷을 이용할 수 있다.

 

네트워크 장비는 사설 IP와 공인 IP를 모두 가지고 있으며, 자신을 지나는 데이터의 사설 IP 주소를 자신의 공인 IP 주소로 바꾸어 중계한다. 이러한 기능을 네트워크 주소 변환( NAT, Network Address Translation )이라고 한다.

이 같은 NAT 기능을 수행하는 네트워크 장비를 보통은 '게이트웨이'라고 부른다.

 

'CS' 카테고리의 다른 글

[CS] 디스패처( Dispatcher )  (0) 2025.02.11
[CS] 디자인 패턴  (0) 2024.11.11
[CS] 랜카드, MAC 주소  (0) 2024.10.02
[CS] 웹서버와 게임서버  (0) 2024.08.25
[CS] 문자 집합과 인코딩  (0) 2024.08.19

랜카드( NIC, Network Interface Card, Network Interface Controller )

단말장치들이 인터넷과 같은 네트워크에 연결되기 위해서 필요한 장치.

여기서에서 랜( LAN, Local Area Network )이란 소규모의 네트워크를 의미하고,

랜카드는 이런 소규모의 네트워크를 연결해주는 장치라고 생각하면 된다.

 

보통은 메인보드에 내장되어 있기 때문에 별도의 슬롯에 NIC을 추가해 확장할 필요는 없다.

다만 네트워크 속도를 개선하기 위해 별도의 NIC을 탑재하는 경우가 있다.

 

네트워크의 전송 속도를 올린다는 의미는 단순히 데이터를 빨리 전송한다기보다

네트워크의 대역폭을 늘려 한번에 전송할 수 있는 데이터의 양을 늘리는 것이 정확한 표현이다.

 

MAC( Media Access Control )주소

네트워크에서 출발지와 목적지를 나타내는 주소는 총 2가지다. ( MAC 주소와 IP 주소 )

네트워크에서는 IP주소를 참조해 데이터를 목적지 단말장치로 전달한다.

 

전달할 때, IP 주소가 데이터를 보내고자 하는 컴퓨터의 주소가 맞는지를 확인해야 하는데,

이때 활용하는 것이 바로 MAC 주소다.

 

IP 주소는 단말의 위치에 따라 연결되는 네트워크가 달라질 수 있기 때문에 고정적이지 않지만,

MAC 주소는 랜카드의 고유 주소이기 때문에 메인보드 혹은 메인보드에 장착한 NIC을 교체하지 않는 이상

바뀌지 않는다. 따라서 MAC 주소가 네트워크의 출발지 또는 목적지인 단말장치를 구분하기 위한 주소가 된다.

 

MAC 주소 체계

숫자와 알파벳을 포함한 12개의 문자( 16진수 )로 구성되고 - 또는 : 으로 구분한다.

 

2C-60-0C-75-FF-09

00:0C:29:F0:F5:AF

 

거주지 주소를 시, 구, 동 단위로 세분화해 표기하듯,

16진수로 표현되는 MAC 주소도 체계적인 규칙을 가지고 있다.

 

위에 예시로 든 MAC주소를 분석해보자면 다음과 같다.

2C-60-0C 앞 3개는 제조사 식별코드( OUI )를 나타내고

75-FF-09 뒤 3개는 장비 코드( =시리얼번호 )를 나타낸다.

 

제조사 식별코드( OUI, Organizationally Unique Identifier )는 랜카드 제조사가 가지는 고유 번호를 말하고,

장비코드( =시리얼번호 )는 제조사가 각자의 방법으로 할당하는 번호다.

 

MAC 주소는 이론적으로 2^48개의 주소를 지정할 수 있다.

이 중에서 이미 고정되어 자유롭게 할당할 수 없는 MAC 주소가 하나 있는데, 바로 브로드캐스트 주소다.

 

네트워크에서 데이터를 주고 받을 때 반드시 데이터를 보내는 도착지의 MAC 주소가 필요하다.

하지만 MAC 주소를 굳이 알 필요가 없는 통신 방식이 있는데, 바로 브로드캐스드다.

브로드캐스트는 동일한 네트워크 내에 있는 모든 단말장치에 똑같은 데이터를 보내는 통신 방식이기 때문에

목적지를 지정할 필요가 없다. 그럼에도 데이터를 보내기 위해서는 도착지 MAC 주소가 필요는 하니까 

MAC 주소 체계로 표현할 수 있는 맨 마지막 값인 FF:FF:FF:FF:FF:FF을 브로드캐스트 주소로 지정한다.

'CS' 카테고리의 다른 글

[CS] 디스패처( Dispatcher )  (0) 2025.02.11
[CS] 디자인 패턴  (0) 2024.11.11
[CS] IP 주소의 체계, 사설망, 공인망  (0) 2024.10.07
[CS] 웹서버와 게임서버  (0) 2024.08.25
[CS] 문자 집합과 인코딩  (0) 2024.08.19

웹서버

http 또는 https를 통해 웹 브라우저에서 요청하는 html 문서나 오브젝트( 이미지, 파일 등 ) 을 

전송해주는 서비스 프로그램을 말한다.

 

웹서버

 

웹 서버의 주된 기능은 웹 페이지를 클라이언트로 전달하는 것이다.

주로 그림, CSS, 자바스크립트를 포함한 HTML 문서가 클라이언트로 전달된다.

 

웹서버에서 보내준 데이터 즉, 그림이나 텍스트 같은 것을 보기만 하면 되기 때문에

연결을 계속 유지하고 있을 필요가 없다. 

따라서 요청한 데이터를 보내주고 나면 연결을 끊는다. 

 

연결을 유지 할 필요가 없다는 것은 해당 유저를 웹 서버 메모리에 올려두지 않는다는 말과 같다.

그렇기 때문에 사용자의 상태값이 존재하지 않는다. ( = 스테이리스 서버 )

 

그렇다면 유저가 웹에 다시 요청할때 웹서버는 요청한 유저가 그 유저인지 어떻게 판단할까?

이때 등장하는 개념이 쿠키다. 

 

쿠키 : 웹에 접속할 때마다 클라이언트 브라우저에 텍스로 정보를 남겨두는 파일

 

클라이언트가 웹에 요청할때마다 따로 붙이지 않아도 http 헤더 아래에 쿠키가 붙어서 웹 서버로 같이 들어간다.

쿠키에 요청한 유저를 확인할 수 있는 정보를 담아 웹서버로 전달하고,

웹서버에서 해당 내용을 해석해 유저를 확인한다.

 


 

게임서버

인터넷 상에서 여러 플레이어가 같이 게임을 할 수 있게 하기 위한 프로그램을 말한다.

보통 TCP/IP 프로토콜을 이용해 서버를 구축한다.

 

웹서버와는 다르게 유저가 접속을 끊지 않는 이상 연결을 계속 유지해야한다.

연결을 계속 유지해야하는 것은 해당 유저를 게임 서버 메모리에 올려둔다는 말과 같다.

그렇기 때문에 사용자의 상태값이 존재한다. ( = 스테이풀 서버 )

 

연결을 유지하기 때문에 다른 유저들의 행동, 변화를 바로바로 동기화가 가능하다.

또한 빠른 처리 속도로 실시간 온라인 게임이 가능하며,

모든 게임의 로직을 서버가 전담 하므로 핵이 불가능하다.

'CS' 카테고리의 다른 글

[CS] 디스패처( Dispatcher )  (0) 2025.02.11
[CS] 디자인 패턴  (0) 2024.11.11
[CS] IP 주소의 체계, 사설망, 공인망  (0) 2024.10.07
[CS] 랜카드, MAC 주소  (0) 2024.10.02
[CS] 문자 집합과 인코딩  (0) 2024.08.19

+ Recent posts