목록CS 지식 (87)
Taking baby-developer steps
"객체가 식별 가능하다"는 "서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다"라는 말이다. 모든 객체는 식별자를 가지며, 이를 이용해 객체를 구별할 수 있다. 식별자란 특정한 프로퍼티를 말한다. 값과 객체의 가장 큰 차이점 또한 값은 식별자가 없고 객체는 식별자를 가진다는 것이다. -> 이는 시스템을 설계 할 때 값과 객체의 차이를 명시적으로 표현하는데 매우 중요하다. 값이란, 변하지 않는 불변의 상태(immutable state)를 가진다. 값의 경우 두 인스턴스의 상태가 같다면 두 인스턴스를 같은 것으로 판단한다. "상태가 같으면" 값이 같다. 상태가 다르면 두 인스턴스는 다른 것으로 판단한다. 이처럼 상태를 이용해 두 값이 같은지 판단할 수 있는 성질을 동등성(equality)라고 한다...
- 상태와 행동 객체는 자율적이다. 그러나 객체의 상태가 저절로 변경되진 않는다. 객체의 상태는 자발적인 행동에 의해 변경된다. ("내"가 현관문을 통과하면 나의 위치(상태)가 '집 안'에서 '집 밖'으로 바뀐다) 객체가 취하는 행동은 자신의 상태를 변경 시키는 등의 부수 효과(side effect)를 발생 시킨다. 이상한 나라의 앨리스에서, 앨리스가 물을 마신 행동이 앨리스 자신의 키를 작게 만들(side effect)고 동시에 물병 안에 있는 물의 양도 감소(side effect)시켰다. 앨리스가 문을 통과하는 행동은 앨리스의 위치를 변화시킨(side effect)다. 그러나 당시의 행동은 이전에 일어난 과거 행동에 영향을 받는 것을 지난 포스팅을 통해 알았다. 따라서 행동은 상태에 영향을 받는다. ..

쓰레드에는 2가지 타입이 있다. •유저 쓰레드(user) : 사용자 모드에서 사용하는 쓰레드(유저 모드에서 쓰레딩 한 쓰레드) •커널 쓰레드(kernel) : 커널 모드에서 사용하는 쓰레드(운영체제가 직접 매니징하는 쓰레드) 쓰레드는 운영체제가 지원. 그런데 자바(버추얼 머신임. 운영체제 아님)도 쓰레딩 기능을 지원한다. 자바는 운영체제가 아니므로 cpu를 넘나들 수는 없다.이와같이 운영체제의 쓰레드와는 무관한 쓰레드(green 쓰레드 라고도 함)를 user 쓰레드 라고 하고, kernel 쓰레드는 코어에서 직접 쓰레딩을 할 수 있는 것을 커널 쓰레드라고 하고, 이는 운영체제가 직접 관리 한다. ? 유저 쓰레드와 커널 쓰레드가 그래서 어떤 관계인데? 기본적으로 우리는, 쓰레드 라이브러리가 있어야 쓰레드를..

현재까지는 흐름(쓰레드가)이 하나뿐인 프로세스를 생각해 왔다. 그러나, 하나의 프로세스는 여러개의 쓰레드들을 컨트롤 할 수 있다. •프로세스가 한번에 여러개 동작 할 수 있었던 이유? cpu가 program counter를 가지고 있고, 이를 context switching 할시에 바꿔주면 , 각각의 실횅할 프로세스의 context를 가지고 와서 실행 할 수 있다. →이 때, 이 pc(program counter)즉, register set 정보만 별도로 유지 한다면, 하나의 프로그램(프로세스 안에서) 굳이 fork할 필요 없이, 실행 쓰레드만 달리 할 수 있다. •쓰레드란? ◦a lightweight process (LWP) ◦멀티 쓰레딩이 제공 될 때, 실제로 “CPU를 점유하는 기본 단위”이다 ◦어..

이번 포스팅 그림 요약— 프로세스의 실행 - 독립적 실행 / 협력적 실행—> 독립적 실행인경우 CPU의 타임 스케쥴링만 잘 해주면 문제 없음.협력적 실행이 필요한 경우가 있음.독립적 실행 → 공유하는 데이터도 없고 메세지 주고받을 사항이 없는 경우. 협력적 실행 → 영향을 주거나 받는 경우 ⇒ 데이터를 공유하거나 메세지를 주고 받는 경우IPC (Inter_process Communication)데이터를 주거나 받거나 하는 경우.→ 공유 메모리를 써서 데이터를 주고 받는 방법→메세지를 주고 받는 방법 중한가지로 통신을 하면 된다.공유 메모리 방법 : 예를 들어, Process A(아빠)와 Process B(아들) 사이에 shared memory(용돈함)이 있어서, 아빠가 용돈을 넣으면 아들이 가져가는 구조..

context switch를 하기 위해 동기화(synchronization)을 잘 해야하는데,(동시성 제어) 이 전에 프로세스는 어떻게 생성해야하는지를 알아야한다! (다음 시간엔 프로세스간 통신 (IPC)에 대해 학습할 예정!) 유닉스 계열 OS에서, 새로운 프로세스의 생성은 반드시 fork() system call을 이용하게 되어있다. ⇒ 자식 프로세스는 보통 “a copy of the address space”해서 만든다. == 현재 나의(부모의) 프로세스의 주소 공간을 복사해서 만든다. —> 부모 프로세스와 자식 프로세스는 fork() 시스템 콜 이후 계속 실행이 되는데, return code에서 차이를 보인다. → fork()의 return code가 0 이면 —> 자식 프로세스 → 0이 아닌 p..

오늘의 키워드 물리 계층 전기 신호 디지털 신호 랜 카드 케이블 허브 오늘의 목표 전기 신호를 이해한다. 랜 케이블을 이해한다. 리피터를 이해한다. 허브를 이해한다. •전기 신호 0과 1만으로 이루어진 비트열을 전기 신호로 변환하려면 다음 그림과 같이 맨 아래 계층인 물리 계층의 기술이 필요하다. 네트워크를 통해 데이터를 주고 받을 대는 0과 1의 비트열을 전기 신호로 변환해야한다. 전기 신호의 종류에는 아날로그 신호와 디지털 신호가 있다. 다음 그림에서 물결 모양 전기 신호를 아날로그 신호라고 하며, 아날로그 신호는 전화 회선이나 라디오 방송에 사용되는 신호이다. 아래쪽 모양 전기 신호를 디지털 신호라고 한다. 그럼 데이터는 어떻게 이런 전기 신호로 변환 될까? 다음 그림과 같이 데이터 송신 측 컴퓨터..

네트워크에서는 통신을 하기 위해 지켜야 하는 규칙이 있다. 통신의 기본 규칙인 프로토콜에 대해 배운다. 오늘의 키워드 프로토콜 OSI 모델 TCP/IP 모델 캡슐화 역캡슐화 헤더 오늘의 목표 프로토콜을 이해한다. OSI 모델과 TCP/IP 모델을 이해한다. 캡슐화와 역캡슐화를 이해한다. • 프로토콜이란? 네트워크에서 문제없이 통신하려면 규칙(약속)을 지켜야 한다. 서로 다른 나라 사람들이 만났을 때 서로 알아들을 수 있는 언어로 대화를 나누는 것과 비슷하다. 서로 대화할 때 “영어로 대화한다”는 규칙을 정해두면 문제없이 대화할 수 있다. 이와 같은 규칙을 프로토콜(protocol)이라고 한다. 네트워크에 대해 공부할 때는 매우 중요한 용어이니 꼭 기억할것! 프로토콜에 대한 이해를 돕기 위해, 편지를 예를..

오늘의 키워드 •네트워크 •패킷 •비트와 바이트 •랜(LAN) •왠(WAN) •서버(server) 오늘의 목표 • 네트워크가 무엇인지 이해한다. • 패킷을 이해한다. • 랜과 왠에 대해 이해한다. ⇒ 네트워크를 처음 배우는 초급자가 꼭 알아야할 네트워크 기초 지식들 •네트워크 먼저 네트워크는 다양한 기능이 결합되어 있다. 이 기능은 여러 계층(레이어) 형태로 구성되어 있다. 계층 구조를 이해하면 문제가 발생한 원인이 네트워크 장비인지, 애플리케이션인지 판단할 수 있다. 우리가 공부할 “네트워크”란 컴퓨터 네트워크이다. 두대 이상이 연결되어있으면 훌륭한 컴퓨터 네트워크가 되고, 컴퓨터 간에 필요한 데이터(정보)를 주고 받을 수 있다. 인터넷? → 전 세계의 큰 네트워크부터 작은 네트워크까지를 연결하는 거대..

운영체제? •컴퓨터 하드웨어를 관리하는 소프트웨어 •유저와 하드웨어 간의 중간다리 역할을 한다. 컴퓨터 시스템엔 크게 4가지의 컴포넌트가 있다고 생각할 수 있다. •하드웨어 •OS •애플리케이션 프로그램들 •사용자 유저는 OS에 요청만 하면 서비스를 제공 받을 수 있다. 사실 운영체제의 정의는 매우 많다. 단 한가지로 정의 할 수가 없기 때문. 주로 흔하게 많이 하는 정의는 그저 “the one program running at all times on the computer”일 뿐. 이 흔한 정의대로, 운영체제를 항상 작동되고 있는 한 프로그램이라고 본다면, 운영체제의 가장 중요한 부분은 바로 “커널”이다. 커널에서 시스템 프로그램과 애플리케이션 프로그램들에 대한 “인터페이스”를 제공해 준다. 전통적인 ..