컴퓨터 시스템 2주차

2025. 4. 3. 21:52개념 공부

 동시성과 병렬성의 차이

  • 동시성(Concurrency):
    • 여러 작업이 겉보기에 동시에 일어나는 것처럼 보이게 처리하는 방식
    • 실제로는 한 개의 프로세서가 여러 작업을 빠르게 전환하면서 처리함
    • 예: 하나의 웹서버가 여러 사용자의 요청을 동시에 처리하는 것처럼 보이게함
    • 문맥 교환

• 병렬성(Parallelism):

  • 여러 작업을 진짜로 동시에 수행하는 것
  • 여러 프로세서 또는 코어가 실제로 여러 작업을 병렬로 실행함

쓰레드 수준 동시성

  • 하나의 프로세스 안에 여러 쓰레드를 두어 여러 제어 흐름을 동시에 실행하는 것
  • 1960년대 시간공유(time-sharing) 개념에서 시작됨
  • 동시 실행은 실제로는 빠른 작업 전환으로 시뮬레이션 됨
  • 예: 브라우저, 문서 편집기, 음악 재생을 동시에 쓰는 환경

 멀티프로세서 시스템

  • 여러 CPU를 가진 시스템(멀티코어 포함)
  • 예전에는 대형 컴퓨터에서만 사용됐지만, 지금 일반 컴퓨터도 멀티코어 CPU 사용

멀티코어 / 하이퍼쓰레딩

  • 멀티코어: 하나의 칩 안에 여러 CPU 코어가 들어 있음(예: 인텔 i7은 4코어)
  • 하이퍼쓰레딩: 하나의 코어가 두 개의 쓰레드를 실행할 수 있는 기술
    • CPU가 매 사이클마다 실행할 쓰레드를 바꿔서 효율적으로 처리함

 멀티프로세싱의 장점

  • 여러 작업을 동시에 실행할 수 있어 성능 향상
  • 하나의 프로그램도 병렬로 표현하면 더 빨리 실행 가능
    • 단, 프로그램이 병렬 처리가 가능해야 함 (멀티쓰레딩 구조로 짜야 함)

네트워크 = 또 다른 입출력 장치

  • 시스템 입장에서 보면, 네트워크도 하드디스크나 키보드처럼 I/O 장치 중 하나
  • 데이터를 메모리에서 네트워크 어댑터로 복사하면 → 다른 컴퓨터로 데이터가 전송됨
  • 반대로, 네트워크에서 받은 데이터를 메모리로 복사해서 사용할 수 있음

네트워크의 중요성

  • 인터넷 시대 이후, 컴퓨터의 주요 목적 중 하나는 다른 컴퓨터로 데이터를 보내고 받는 것
  • 예시 : 이메일, 웹 브라우징, 메신저, FTP, 텔넷 등
  • → 모두 네트워크를 통한 데이터 전송에 기반함

예: 텔넷(telnet)으로 원격 실행

  • telnet은 다른 컴퓨터에 접속해서 명령을 실행할 수 있는 네트워크 프로그램
  • 예를 들어:
    1. 사용자 입력 → telnet 클라이언트가 원격 서버에 보냄
    2. telnet 서버 → 입력을 받아서 쉘에 전달
    3. 쉘이 프로그램(예: hello)을 실행
    4. 출력 결과를 다시 클라이언트에게 네트워크를 통해 전달
    5. 클라이언트는 그 결과를 로컬 화면에 출력

 클라이언트-서버 모델

  • 위와 같은 방식은 모든 네트워크 기반 프로그램의 전형적인 구조
  • 클라이언트 ↔ 서버간 데이터 주고받기가 핵심임
추상화란?
복잡한 내부 동작을 숨기고, 필요한 정보만 제공하는 것!

비유: 전기 스위치

우리가 스위치를 누르면 전등이 켜진다

그런데 내부에서는:

전류 흐름

회로 연결

전압 제어 등 복잡한 동작이 있습니다.

우리는 그걸 몰라도 되고 “스위치 ON → 불 켜짐” 만 알면 됩니다.

 

이게 바로 추상화의 대표적인 사례입니다.

🔍 구체적인 추상화 예시

 

1. 파일 시스템

우리가 쓰는 건: open('file.txt'), read(), write()

실제로는:

디스크 블록 할당

캐시 처리

데이터 위치 계산

 사용자 입장에서는 “파일이라는 개념”만 다루면 됨 → 내부는 추상화

2. 가상 메모리

사용자 입장에서는 연속된 메모리 공간처럼 보임

실제로는 물리 메모리 여기저기에 흩어져 있음

운영체제가 물리 주소와 논리 주소를 매핑해서 감춰줌

3. 하드웨어 제어

우리가 printf() 하면 문자 출력됨

실제로는:

CPU가 I/O 레지스터에 데이터 쓰고

디바이스 드라이버가 처리함

우리는 그 복잡한 절차를 몰라도 됨 → 추상화!

 

장점설명
✅ 단순화 사용자와 개발자가 복잡한 내부 구조를 몰라도 사용 가능
✅ 재사용성 기능을 모듈화해서 여러 곳에서 재사용 가능
✅ 유지보수 용이 내부 구현을 바꿔도 외부 인터페이스는 그대로 유지 가능