컴퓨터 시스템 2주차
2025. 4. 3. 21:52ㆍ개념 공부
동시성과 병렬성의 차이
- 동시성(Concurrency):
- 여러 작업이 겉보기에 동시에 일어나는 것처럼 보이게 처리하는 방식
- 실제로는 한 개의 프로세서가 여러 작업을 빠르게 전환하면서 처리함
- 예: 하나의 웹서버가 여러 사용자의 요청을 동시에 처리하는 것처럼 보이게함
- 문맥 교환
• 병렬성(Parallelism):
- 여러 작업을 진짜로 동시에 수행하는 것
- 여러 프로세서 또는 코어가 실제로 여러 작업을 병렬로 실행함
쓰레드 수준 동시성
- 하나의 프로세스 안에 여러 쓰레드를 두어 여러 제어 흐름을 동시에 실행하는 것
- 1960년대 시간공유(time-sharing) 개념에서 시작됨
- 동시 실행은 실제로는 빠른 작업 전환으로 시뮬레이션 됨
- 예: 브라우저, 문서 편집기, 음악 재생을 동시에 쓰는 환경
멀티프로세서 시스템
- 여러 CPU를 가진 시스템(멀티코어 포함)
- 예전에는 대형 컴퓨터에서만 사용됐지만, 지금 일반 컴퓨터도 멀티코어 CPU 사용
멀티코어 / 하이퍼쓰레딩
- 멀티코어: 하나의 칩 안에 여러 CPU 코어가 들어 있음(예: 인텔 i7은 4코어)
- 하이퍼쓰레딩: 하나의 코어가 두 개의 쓰레드를 실행할 수 있는 기술
- CPU가 매 사이클마다 실행할 쓰레드를 바꿔서 효율적으로 처리함
멀티프로세싱의 장점
- 여러 작업을 동시에 실행할 수 있어 성능 향상
- 하나의 프로그램도 병렬로 표현하면 더 빨리 실행 가능
- 단, 프로그램이 병렬 처리가 가능해야 함 (멀티쓰레딩 구조로 짜야 함)
네트워크 = 또 다른 입출력 장치
- 시스템 입장에서 보면, 네트워크도 하드디스크나 키보드처럼 I/O 장치 중 하나
- 데이터를 메모리에서 네트워크 어댑터로 복사하면 → 다른 컴퓨터로 데이터가 전송됨
- 반대로, 네트워크에서 받은 데이터를 메모리로 복사해서 사용할 수 있음
네트워크의 중요성
- 인터넷 시대 이후, 컴퓨터의 주요 목적 중 하나는 다른 컴퓨터로 데이터를 보내고 받는 것
- 예시 : 이메일, 웹 브라우징, 메신저, FTP, 텔넷 등
- → 모두 네트워크를 통한 데이터 전송에 기반함
예: 텔넷(telnet)으로 원격 실행
- telnet은 다른 컴퓨터에 접속해서 명령을 실행할 수 있는 네트워크 프로그램
- 예를 들어:
- 사용자 입력 → telnet 클라이언트가 원격 서버에 보냄
- telnet 서버 → 입력을 받아서 쉘에 전달
- 쉘이 프로그램(예: hello)을 실행
- 출력 결과를 다시 클라이언트에게 네트워크를 통해 전달
- 클라이언트는 그 결과를 로컬 화면에 출력
클라이언트-서버 모델
- 위와 같은 방식은 모든 네트워크 기반 프로그램의 전형적인 구조
- 클라이언트 ↔ 서버간 데이터 주고받기가 핵심임
추상화란?
복잡한 내부 동작을 숨기고, 필요한 정보만 제공하는 것!
비유: 전기 스위치
• 우리가 스위치를 누르면 전등이 켜진다
• 그런데 내부에서는:
• 전류 흐름
• 회로 연결
• 전압 제어 등 복잡한 동작이 있습니다.
• 우리는 그걸 몰라도 되고 “스위치 ON → 불 켜짐” 만 알면 됩니다.
이게 바로 추상화의 대표적인 사례입니다.
🔍 구체적인 추상화 예시
1. 파일 시스템
• 우리가 쓰는 건: open('file.txt'), read(), write()
• 실제로는:
• 디스크 블록 할당
• 캐시 처리
• 데이터 위치 계산
• 사용자 입장에서는 “파일이라는 개념”만 다루면 됨 → 내부는 추상화
2. 가상 메모리
• 사용자 입장에서는 연속된 메모리 공간처럼 보임
• 실제로는 물리 메모리 여기저기에 흩어져 있음
• 운영체제가 물리 주소와 논리 주소를 매핑해서 감춰줌
3. 하드웨어 제어• 우리가 printf() 하면 문자 출력됨
• 실제로는:
• CPU가 I/O 레지스터에 데이터 쓰고
• 디바이스 드라이버가 처리함
• 우리는 그 복잡한 절차를 몰라도 됨 → 추상화!
장점설명
✅ 단순화 사용자와 개발자가 복잡한 내부 구조를 몰라도 사용 가능 ✅ 재사용성 기능을 모듈화해서 여러 곳에서 재사용 가능 ✅ 유지보수 용이 내부 구현을 바꿔도 외부 인터페이스는 그대로 유지 가능
'개념 공부' 카테고리의 다른 글
| 컴퓨터 시스템 7장-링커(Linking) 1-1 (0) | 2025.04.19 |
|---|---|
| 포인터 (0) | 2025.04.14 |
| 컴퓨터 시스템에서의 가상화 (1) | 2025.04.12 |
| CS:APP 3장 – 기계 수준 프로그램 표현 (중요 개념 정리) (0) | 2025.04.09 |
| 파이썬 List는 과연 무엇인가? (2) | 2025.03.27 |