Sad Puppy 3 'ComputerSicence' 카테고리의 글 목록 :: 개발자 아지트

패킷

→ 네트워크를 통해 전송되는 형식화된 데이터 덩어리

→ 예를들자면, 이미지 한장 데이터(파일 또는 데이터)를 잘게 패킷 단위로 쪼개서 인터넷을 통해 컴퓨터 대 컴퓨터로 주고 받고 함

→ 왜 잘게 쪼개는가?

  • 컴퓨터 대 컴퓨터로 통하는데는 여러 길이 있음
  • 하나의 길을 전체 데이터 단위가 차지할 경우
    • 그 길이 큰 데이터를 못버틸 수 있음 = 길마다 수용 가능 범위가 있음 → 길이 통제됨
    • 장애가 한번 나면 끝장임
    • 다른 컴퓨터랑도 통신해야하는 길인데 독점하게 됨
  • 잘게 쪼갠 후 보내면 받는 쪽에서는 각각의 순서를 체크하여 재 조립함
  • 만약 일부 데이터가 누락되면 그 데이터만 다시 요청함

⇒ 빠르고 안전하기 때문임

패킷의 구성요소: 헤더, 페이로드

  • 헤더에는 패킷의 출처, 용도, 처리 방법이 적혀있음(원본 및 대상 IP주소)
  • 페이로드는 실제 데이터임 (쪼개진)

라우터란?

둘 이상의 패킷 교환 네트워크(인터넷)나 서브네트워크를 연결하는 장치(네트워크 하드웨어)임.

(서로 다른 네트워크 간에 데이터를 전달함)

패킷이 인터넷을 이동하다가 길이 막히면 다른 경로로 안내해줌

⇒ 인터넷 길목마다 서 있는 ‘교통 경찰관’ 같은 역할을 함

⇒ 패킷이 어느 길로 가야 가장 빠르고 안전하게 갈 수 있을지 매번 판단해줌

⇒ IP주소를 참고함

라우터의 기능

  • 데이터 패킷을 의도한 IP 주소로 전달해서 네트워크 간의 트래픽을 관리함.
  • 여러 장치가 동일한 인터넷 연결을 사용할 수 있도록 함

라우터에도 여러 유형이 있음.

그러나, 대부분의 라우터는 근거리 통신망(LAN)과 광역 네트워크(WAN) 간에 데이터를 전달함.

*LAN: 특정 지리적 영역으로 제한된, 연결된 장치 그룹임. 일반적으로 단일 라우터가 필요.

*WAN: 넓은 지리적 영역에 분산된 대규모 네트워크.

ex) 전국의 여러 위치에서 운영되는 대규모 조직 및 회사는 각 위치에 대해 별도의 LAN이 필요함.

   이 LAN은 다른 LAN과 연결되어 WAN을 형성함

   WAN은 넓은 영역에 분산되어 있으므로, 여러 라우터와 스위치가 필요한 경우가 많음 

라우터의 작동 방식

: 라우터는 내부 라우팅 테이블을 참조해 네트워크 경로를 따라 패킷을 라우팅 하는 방법을 결정함

과정

  1. 라우터가 패킷 수신
  2. 패킷의 헤더를 읽어 목적지를 확인
  3. 라우팅 테이블의 정보를 기반으로 패킷을 라우팅할 위치를 결정

라우팅 테이블의 종류

  • 정적
    • 변경되지 않음.
    • 네트워크 관리자가 수동으로 라우팅 경로를 설정해야함
  • 동적
    • 자동으로 업데이트됨
    • 다양한 라우팅 프로토콜을 사용해 최단 경로와 가장 빠른 경로를 판단하여 결정함
    • 지도에 최상의 주행 경로를 결정하는 방식과 유사하게 패킷이 목적지에 도달하는 데 걸리는 시간을 기반으로 자동 업데이트함
    • 많은 컴퓨팅 성능이 필요함
      • 소규모 네트워크에서 정적 라우팅에 의존하는 이유임
      • 중간, 대규모 네트워크는 동적 라우팅이 훨씬 효율적

주요 라우팅 프로토콜

:IP, BGP 등..

라우팅이란?

네트워크 라우팅은 하나 이상의 네트워크에서 경로를 선택하는 프로세스임

⇒ 인터넷 경로 결정은 라우터라는 특수한 네트워크 하드웨어를 통해 이루어짐

ex) A에서 B로 전달될 때, 라우터가 1-3-5, 2-4 경로 중에 어디로 가는게 빠른지 판단하여 경로를 결정해 주는것임.

 

스위치란?

 

동일한 네트워크 장치 그룹 간(LAN:근거리 통신망)에 데이터 패킷을 전달함

MAC 주소를 참고하여 딱 해당되는 포트로만 보냄

허브처럼 브로드캐스팅 하지 않음

쓰레드의 등장 배경 및 멀티스레딩과 멀티프로세싱

멀티태스킹(멀티 프로세싱, 멀티 스레딩 포함)
├── 멀티프로세싱
└── 멀티스레딩

멀티 프로세싱

: 여러 개의 프로세스를 동시에 혹은 빠르게 시분할 하여 실행하는 방식

-코어가 여러개인 시스템의 경우, 각 코어가 서로 다른 프로세스를 동시에 독립적으로 실행시킴

-코어가 하나인 시스템에서도, 운영체제가 프로세스 간 컨텍스트 스위칭을 매우 빠르게 수행함으로써 여러 프로세스가 동시에 실행되는 것처럼 동작시킴

멀티 프로세싱의 한계

  1. 하나의 프로세스는 동시에 여러 작업을 수행하지 못한다.
    → 여러 프로세스를 생성해 문제를 해결할 수 있으나, 프로세스가 많아지면 관리나 자원 소모 측면에서 여러 단점이 발생함
  2. 프로세스 간 컨텍스트 스위칭이 무겁다.
    → 컨텍스트 스위칭 작업은 무겁고 비용이 큼
    → 프로세스에서 다른 프로세스로 전환할 때 CPU에서 컨텍스트 스위칭이 발생함.
  3. 프로세스 간 데이터 공유가 어렵다. = IPC를 사용해야함
    → 데이터 공유는 언제 필요한건가?
    ex1) 웹 서버 구조, 프론트 요청을 처리하는 프로세스와 DB에 직접 접근하여 결과를 가공하는 백엔드 프로세스 간 데이터를 공유해야 하는 상황
    ex2) 멀티프로세싱 워커(pool), 대용량 데이터를 병렬 처리하기 위해 여러 워커 프로세스를 띄워놓고, 각 워커가 처리한 결과를 모아 최종 결과를 만들어야 하는 상황
    → 각 프로세스는 독립적인 (가상) 메모리 공간을 사용하기 때문에, 서로 다른 프로세스 간 데이터 공유가 까다로움

    왜 까다로운가?
    : 운영 체제는 한 프로세스가 비정상 종료되거나 엉뚱한 메모리에 접근을 해도 다른 프로세스의 메모리에 직접적인 피해를 주지 않아야함.
    때문에 각 프로세스는 독립적인 메모리 공간을 사용하고, “다른 프로세스 메모리를 막 읽거나 쓰는 행위”를 금지함.

    그렇다면 프로세스 간 데이터 공유는 어떻게?
    : 반드시 운영체제가 제공하는 별도의 통로 IPC를 거쳐야함.
    IPC(Inter-Process Communication)

위와 같은 문제를 해결하기 위해 등장한 것 ⇒ 스레드 (Thread)

스레드(Thread): 한 프로세스 내에서 여러 작업을 동시에 실행하게 해줌

  • 하나의 프로세스 내에 여러 스레드를 보유할 수 있다. ⇒ 멀티 스레딩
    • 각 스레드 당 작업 하나가 할당된다.
  • 요즘 CPU의 실행 단위는 스레드 단위이다.
    • 과거에는 프로세스 단위가 CPU의 실행 단위였다.
  • 컨텍스트 스위칭이 가볍다.
    • 스레드는 같은 프로세스 내에서 메모리 영역(Heap)을 공유함.
    • 따라서 프로세스 간 스위칭 보다 훨씬 가볍다.
    • 다만 모든걸 공유하는건 아님
      • 각 쓰레드는 Stack, 포인터, 프로그램 카운터 등을 고유하게 가지면서 자신의 실행 상태를 유지한다.

'ComputerSicence > 운영체제' 카테고리의 다른 글

멀티쓰레딩  (0) 2025.06.04

멀티쓰레딩은 하나의 프로세스 내에서 여러 작업을 여러 쓰레드를 통해 동시에 실행할 수 있도록 하는 방식.

 

특징

1. 경량화된 실행 단위

- 낮은 오버헤드: 스레드는 같은 프로세스 내에서 실행됨 -> 프로세스 간의 컨텍스트 스위칭에 비해 스레드 간 전환은 훨씬 가볍고 빠름

- 빠른 전환: 각 쓰레드는 자신만의 스택과 레지스터(프로그램 카운터)를 갖지만, 코드나 힙 메모리 등은 공유하기 때문에 전환 시 재설정해야 할 데이터의 양이 적어 전환 속도가 빠름

 

2. 효율적인 데이터 공유

- 공유 메모리: 같은 프로세스 내의 스레드들은 힙 영역 등 주요 메모리 공간을 공유함. -> 데이터 전달이 빠르고 간편

-동기화 관리: 스레드 간의 데이터 공유는 IPC와 같은 복잡한 메커니즘 없이도 이루어지지만, 동시에 접근할 경우 동기화 문제는 여전히 존재함

* IPC란 하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스 간에 발생하는 통신 임 (Inter-process Communication)

* 프로세스는 각자 독립적인 주소 공간을 가지고 수행됨 

 

3. 응답성 및 처리 성능 향상

- 벙렬 처리: 멀티쓰레딩을 통해 I/O작업과 CPU 집약적 작업을 분리해 동시에 처리할 수 있으므로, 시스템 전체의 응답성이 향상됨

-리소스 활용 최적화: CPU의 멀티코어 환경에서 각 스레드를 개별 코어에 할당하여 병렬 처리가 가능해짐, 시스템 자원을 더욱 효율적으로 사용할 수 있음

 

멀티 쓰레딩의 장점 

- 프로세스 기반의 멀티태스킹보다 낮은 비용의 컨텍스트 스위칭 가능

-효율적인 메모리 사용, 빠른 데이터 공유

-I/O작업이나 대기 작업을 별도의 스레드로 처리하여 주 스레드가 차단되지 않고 사용자 입력이나 다른 중요한 작업에 빠르게 대응할 수 있게됨 

 

멀티 쓰레딩의 단점

- 스레드들이 같은 메모리를 공유하니 경쟁 상태, 교착 상태 같은 동기화 문제 발생 가능성이 있고, 해당 문제 해결 과정이 복잡하거나 디버깅이 어려워질 수 있음

- 스레드 관리를 소홀히 할 경우, 시스템 자원이 과하게 사용될 위험 존재 

 

 

https://www.maeil-mail.kr/question/236

'ComputerSicence > 운영체제' 카테고리의 다른 글

멀티프로세싱의 한계  (2) 2025.06.05

*패리티 비트

정의: 정보 전달 과정에서 오류가 생겼는지 검사하기 위해 추가하는 비트

사용법: 전송하고자 하는 데이터의 각 문자에 1 비트를 더해 전송한다. 

 

예를들어서 "김민수" 라는 데이터가 있으면

김에 +1 = 8+1 = 9비트

지에 +1 = 8+1 = 9비트

연에 +1 = 8+1 = 9비트

 

이런식으로 각 문자에 1비트를 더해서 전송한다. 

 

종류: 짝수패리티, 홀수패리티

 

종류는 전송 시스템이나 프로토콜 설계하거나 설정할 때 미리 결정됨

송, 수신측에서 같은 규칙을 따를 수 있도록 사전에 합의 해야함

 

짝수패리티가 짝수개수를 다루기 쉬워서 일반적으로 더 많이 사용됨

 

종류는 전체 비트에서 1이 짝수개인지 홀수개인지에 따라 종류가 나뉜다는 의미이다. 

 

전체 비트에서 1의 개수가 (짝수, 홀수)에 맞도록 비트를 정하는 것

 

[짝수 패리티]

짝수 패리티 일 때 7비트 데이터가 1010001 (7자)라면?

1이 총 3개이므로, 1을 짝수로 맞춰주기 위해 1을 더해야 함 

 

만약 1의 개수가 짝수개라면? 0을 맨뒤에 추가한다. 

 

=> 11010001 (맨 앞이 패리티비트) (8자)

 

[홀수 패리티]

만약 데이터가 1010110이고, 1의 개수가 짝수라면, 홀수 패리티에서는 1의 개수가 홀수가 되도록 패리티 비트를 정해야함.

따라서 1을 추가해야함 1은 맨뒤에 추가함

만약 1의 개수가 이미 홀수라면, 패리티 비트로 0을 추가해 홀수를 유지한다. 

=> 10101101

 

 

지금 사이트에 있는 방식은 맨 앞에 추가하는 방식인데, 

패리티 비트를 맨 앞에 추가하는 것은 흔하지 않은 방식이고, 대부분 시스템이서는 패리티 비트를 맨 뒤에 추가함. 이것이 표준임.

 

 

이런 방식으로 검사하는 패리티 비트는 데이터를 수신 하는 쪽, 송신하는 쪽 모두에서 이뤄짐. 

만약 규칙이 맞지 않을 경우, 수신된 데이터에 오류가 발생한 것이라고 간주하고 처리함. 

오류가 발견되면 데이터 재전송을 요청하거나 오류를 알림.

 

앞에서 본 것처럼 패리티 비트는 단순한 오류 검출 매커니즘이라, 하드웨어나 소프트웨어에서 간단하게 구현할 수 있음

이 검사 과정은 보통 데이터 링크 계층이나 전송 계층에서 이뤄지고, 네트워크 카드나 모뎀, 통신 프로토콜 등에서 처리함

 

 

그러나,

 

패리티 비트는 1비트 오류만 검출할 수 있고, 2비트 이상의 오류는 검출하지 못하는 한계가 있다. 

 

예를들면, 

원래 데이터가 1010001 이고, 짝수 페리티를 사용하는 경우 전송데이터는 10100011이 되는데,

만약에 2비트 오류가 11100010 이런식으로 발생한 경우, 수신측에서 오류가 없다고 판단할 수 있음. 

 

또한 오류의 위치도 파악할 수 없음 

 

그래서 보다 복잡한 오류 검출 및 수정이 필요한 경우 CRC(Cyclic Redundancy Check), 해밍 코드 등의 다른 오류 검출 방식이 사용됨. 

 

*해밍코드 

 

 

 

정의:데이터 전송 시 1비트의 에러를 정정할 수 있는 자기 오류정정 코드를 말한다. 

페리티비트를 보고, 1비트에 대한 오류를 정정할 곳을 찾아 수정할 수 있다.

(패리티 비트는 오류를 검출하기만 할 뿐 수정하지는 않기 때문에 해밍 코드를 활용함)

 

사용법: 2의 n승 번째 자리인 1, 2, 4번째 비트가 패리티 비트라는 것 부터 시작함.

이 숫자로부터 시작하는 세개의 패리티 비트가 짝수인지, 홀수인지 기준으로 판별함. 

 

1, 2, 4 번째의 각 패리티 비트들은 데이터 내의 특정 비트 집합을 검사하는데, 

이때 비트 집합은 다음과 같다. 

 

1=> 1, 3, 5, 7 번째 비트 확인

2=> 2, 3, 6, 7번째 비트 확인

4=> 4, 5, 6, 7번째 비트 확인

 

비트를 확인할 때 앞에서 부터 읽는다. 

 

0011011

-> 이 방향 (1번째 비트 부터 시작)

 

짝수 패리티의 해밍코드가 0011011일때 오류가 수정된 코드는?

 

1. 1, 3, 5, 7 번째 비트 확인: 0101로 짝수이므로 '0'

2. 2, 3, 6, 7번째 비트 확인: 0111로 홀수이므로 '1'

3. 4, 5, 6, 7번째 비트 확인: 1011로 홀수이므로 '1'

 

역순으로 패리티 비트 110을 도출할 수 있음

10진법으로 바꾸면, 6으로, 6번째 비트를 수정하면 됨

0011001

 

erd란?

: 개체-관계 다이어그램

엔티티, 속성, 관계를 시각적으로 표현하는 방법이다. 

 

엔티티: 현실 세계에서 독립적으로 존재하는 객체, 데이터베이스에서는 테이블로 표현됨

속성: 엔티티의 특성이나 데이터를 나타내며, 엔티티를 설명하고 식별하는데 사용됨

관계; 엔티티 간의 연결을 나타내며, 데이터의 흐름을 정의함 

 

제 1정규화 : 하나의 속성이 하나의 값을 가져야함. (각 테이블의 모든 열이 원자 값을 가짐)

제 2정규화: 기본 키가 아닌 열이 기본 키의 모든 부분에 전적으로 종속하도록 한다. 

제 3정규화: 기본 키에만 의존하지 않는 불필요한 데이터를 제거한다. 

더보기

제 3정규화: 기본 키에만 의존하지 않는 불필요한 데이터를 제거한다. 

기본 키에만 의존하지 않는 불필요한 데이터를 제거한다는 말은 데이터베이스에서 부분 함수 종속과 관련된 문제를 해결하는 것을 의미해. 이것은 데이터를 저장할 때 정보가 중복되지 않도록 테이블을 잘 설계하는 방법 중 하나야. 쉽게 말해서, 데이터를 효율적으로 정리하는 방법이라고 생각하면 돼.

  • 기본 키(Primary Key): 데이터베이스에서 각 줄(row)을 고유하게 식별하는 값이야. 예를 들어, 학생 명단에서는 학생마다 고유한 학생 번호가 기본 키가 될 수 있어. 학생 번호가 같으면 같은 학생이라고 보면 돼.
  • 부분 함수 종속: 테이블의 어떤 칼럼(열)의 값이 기본 키의 일부분에 의해서만 결정되는 상황을 말해. 예를 들어, "수업" 테이블이 있다고 해보자. 여기에는 학생 번호, 수업 코드, 학생 이름, 수업 이름 같은 칼럼이 있어.

문제 상황:

  1. 만약 학생 번호와 수업 코드를 합쳐서 기본 키로 삼는다면, 각 줄은 한 학생이 특정 수업을 듣고 있다는 것을 나타내.
  2. 여기서 학생 이름은 학생 번호에만 의존하고, 수업 이름은 수업 코드에만 의존해.
  3. 이런 상황에서 한 학생이 여러 수업을 들으면 학생 이름이 여러 줄에 반복돼서 저장될 수 있어. 마찬가지로 여러 학생이 같은 수업을 들으면 수업 이름도 반복돼서 저장돼.

해결 방법:

이런 불필요한 중복을 피하기 위해 테이블을 나누는 거야:

  • 학생 테이블: 학생 번호, 학생 이름
  • 수업 테이블: 수업 코드, 수업 이름
  • 수강 테이블: 학생 번호, 수업 코드

이렇게 테이블을 나누면, 각 테이블의 정보가 기본 키에만 의존하게 돼. 따라서 데이터의 중복을 줄이고, 정보가 변경될 때 모든 관련 데이터를 일일이 수정하지 않아도 돼.

이것이 바로 기본 키에만 의존하지 않는 불필요한 데이터를 제거하는 이유야. 이렇게 하면 데이터베이스가 더 효율적으로 관리되고, 오류도 줄일 수 있어.

BCNF: BCNF는 3NF에서 더 나아가 모든 결정자가 후보키가 되도록 한다. 

 

더보기
 

BCNF(Boyce-Codd Normal Form)라는 것은 데이터베이스 테이블을 아주 잘 정리된 상태로 만드는 기준 중 하나야. 

기본 개념들

  • 기본 키(Primary Key): 각 줄(row)을 고유하게 구분할 수 있는 값이야. 학생 명단에서는 학생 번호가 기본 키가 될 수 있어.
  • 후보 키(Candidate Key): 기본 키로 쓸 수 있는 모든 키들을 말해. 기본 키도 후보 키 중 하나야. 예를 들어, 학생 테이블에서는 학생 번호가 유일하다면, 학생 번호가 후보 키야.
  • 결정자(Determinant): 어떤 칼럼의 값이 다른 칼럼의 값을 결정한다면, 이때 앞의 칼럼을 결정자라고 해. 예를 들어, 학생 번호가 있으면 그 학생의 이름을 알 수 있다면, 학생 번호가 학생 이름의 결정자야.

3NF(제3정규형)

3NF는 데이터를 중복 없이 잘 정리하는 기준 중 하나야. 이 기준에 맞으려면 모든 비기본 속성이 기본 키에만 의존해야 해. 예를 들어, 학생 테이블에서 '학생 번호'로 학생 이름과 학년을 알 수 있다면, 그건 3NF야.

BCNF(보이스-코드 정규형)

BCNF는 3NF보다 조금 더 철저한 기준이야. 이 기준에 따르면, 테이블의 모든 결정자는 후보 키여야 해. 즉, 모든 속성을 결정하는 값은 반드시 후보 키여야 한다는 뜻이야.

예시로 이해하기

문제 상황

학생이 듣는 수업을 기록한 테이블을 생각해 보자.

학생 번호수업 코드강의실
1 MATH101 101A
2 SCI102 102B
1 SCI102 102B
  • 여기서 '수업 코드'가 '강의실'을 결정한다고 해보자. 그러니까 'MATH101'은 항상 '101A' 강의실에서 열려.

BCNF가 아닌 이유

이 테이블은 BCNF가 아니야. 왜냐하면 '수업 코드'가 '강의실'을 결정하는데, '수업 코드' 자체는 후보 키가 아니거든. 후보 키는 '학생 번호 + 수업 코드'가 돼야 해.

BCNF로 만들기

테이블을 다음과 같이 나누면 돼:

  1. 수업 테이블 (수업 정보만 따로 분리)수업 코드강의실
    MATH101 101A
    SCI102 102B
  2. 학생 수강 테이블 (학생과 수업 정보만 남김)학생 번호수업 코드
    1 MATH101
    2 SCI102
    1 SCI102

이렇게 나누면, 모든 결정자가 후보 키가 돼서 BCNF를 만족하게 돼!

요약

  • 3NF: 기본 키에만 의존하도록 중복을 제거하는 기준.
  • BCNF: 모든 결정자가 후보 키가 되도록 더 철저하게 정리하는 기준.

이렇게 하면 데이터의 일관성을 유지하고, 오류를 줄일 수 있어. 이런 방식으로 데이터를 정리하는 것은 데이터베이스를 관리하는 중요한 방법이야!

 

제 4정규화: 다치 종속을 제거하여 중복을 줄임

더보기

4NF(제4정규형)은 데이터베이스를 정리할 때 다치 종속(Multi-Valued Dependency)을 제거하여 중복을 더 줄이는 방법이야. 

기본 개념들

  • 다치 종속(Multi-Valued Dependency): 한 속성이 여러 값과 연관될 수 있는 상황이야. 예를 들어, 학생이 여러 과목을 들을 수 있고, 또 여러 활동을 할 수 있다고 해보자. 여기서 학생은 과목과 활동에 다치 종속성을 가질 수 있어.

예시로 이해하기

문제 상황

학생의 수업과 활동을 기록한 테이블이 있다고 해보자.

학생 이름과목활동
철수 수학 축구
철수 영어 축구
철수 수학 수영
철수 영어 수영
  • 철수가 듣는 과목은 수학과 영어야.
  • 철수가 하는 활동은 축구와 수영이야.

중복 문제

이 테이블에는 중복이 많아. 철수가 수학을 듣는다는 정보와 축구를 한다는 정보가 여러 번 반복돼. 이렇게 되면 데이터가 많아지고, 수정하기도 불편해.

다치 종속 해결

4NF는 이런 중복을 없애기 위해 테이블을 나누는 방법이야.

  1. 학생과 과목 테이블 (학생이 듣는 과목만 기록)학생 이름과목
    철수 수학
    철수 영어
  2. 학생과 활동 테이블 (학생이 하는 활동만 기록)학생 이름활동
    철수 축구
    철수 수영

이렇게 나누면 철수가 듣는 과목과 하는 활동이 각각 따로 기록돼서 중복이 줄어들어!

요약

  • 다치 종속: 한 속성이 여러 값과 관련 있는 경우.
  • 4NF: 다치 종속을 제거하여 데이터의 중복을 줄이고, 관리하기 쉽게 만드는 방법.

이렇게 데이터를 정리하면 정보가 깔끔하게 저장되고, 나중에 변경하거나 확인할 때 더 편리해져!

 

제 5정규화: 더 이상 분해를 할 수 없을 때 까지 테이블을 분해한다. 

 

 

 

+ Recent posts