객체지향 프로그래밍 (Object-Oriented Programming)

실세계에 존재하는 데이터와 기능(행위)을 표현하는 객체들을 

레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이다.


예를 들어, 모니터, 키보드, 마우스, 본체 등의 부품을 조합하면 하나의 컴퓨터가 나온다.

이처럼 연관된 로직들을 결합해 메서드를 만들고, 이 메서드들을 부품으로 해서 하나의 독립된 프로그램으로 만드는 것이다.



객체지향 프로그래밍 언어는 다음을 지원한다.

상속 (Inheritance): http://qlyh8.tistory.com/176

캡슐화 (Encapsulation): http://qlyh8.tistory.com/179

다형성 (Polymorphism): http://qlyh8.tistory.com/180

추상화 (abstraction): http://qlyh8.tistory.com/181



객체지향 프로그래밍의 장점

모듈간의 높은 독립성을 유지한다.

한 프로그램 내의 중복 코드를 최소화하며 코드의 재사용성을 높이고 유지보수를 용이하게 한다.



객체지향 프로그래밍의 단점

상대적으로 실행속도가 느리다.

유연성이 너무 커서 프로그래머가 조심해야 할 것이 많다.




참고 출처: https://opentutorials.org/course/743/6553


'Java' 카테고리의 다른 글

생성자 (Constructor)  (0) 2018.11.27
상속 (Inheritance)  (0) 2018.11.27
객체지향 설계  (0) 2018.11.15
static과 final  (0) 2018.08.20
직렬화 (Serialization)  (0) 2018.08.04


Context Switching이란 

멀티 프로세스 환경에서, 어떤 하나의 프로세스가 실행된 상태에서 인터럽트 요청에 의해 다른 프로세스가 실행되어야 할 때, 

기존의 프로세스에 대한 정보를 보관하고 새로운 프로세스에 대한 정보를 적재하는 작업을 말한다.


Context

CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이다. Context는 프로세스의 PCB에 저장된다.


인터럽트(Interrupt)란 

CPU가 프로그램을 실행하고 있을 때, 

실행중인 프로그램 밖(입출력 하드웨어 등)에서 예외상황이 발생하여 처리가 필요할 경우에 

CPU에게 알려 예외 상황을 처리할 수 있도록 하는 것을 말한다.


즉, 인터럽트는 OS가 CPU를 현재 작업에서 빼앗아 커널 루틴을 실행할 수 있게 한다.


인터럽트가 발생하면 시스템은 인터럽트 처리 후에 Context를 복구할 수 있도록,

커널은 실행 중인 프로세스의 Context를 PCB에 저장하고 실행이 스케줄된 새 프로세스의 저장된 Context를 복구한다.


Context Switching이 진행될 동안 시스템이 아무런 유용한 일을 하지 못하기 때문에 Context Switching 시간은 순수한 오버헤드이다.




참고도서: Operating System Concepts 9th


프로세스란 실행중인 프로그램의 인스턴스이다.


프로그램 그 자체는 프로세스가 아니다.

프로그램은 실행 파일이며, 이 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 된다.

예를 들어, 실행 파일을 나타내는 아이콘을 더블 클릭하여 실행되면 프로그램은 프로세스가 된다.



프로세스의 구조

그림 출처: http://boanin.tistory.com/75


stack: 함수의 매개변수, 복귀 주소, 로컬 변수와 같은 임시 자료를 가진다.

heap: 프로세스 실행 중에 동적으로 할당되는 메모리이다.

data: 전역변수를 가진다.

text: 프로그램 코드를 가진다.



프로세스는 실행되면서 그 상태가 변한다.


프로세스 상태도

그림 출처: https://m.blog.naver.com/PostView.nhn?blogId=4717010&logNo=60207137085&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F


new: 프로세스가 생성되었지만 아직 OS에 의해 승인받지 못한 상태이다.

ready: 프로세스가 프로세서에 할당되기를 기다린다.

running: 명령어들이 실행되고 있다.

waiting: 프로세스가 입출력 완료나 신호의 수신 같은 이벤트가 일어나기를 기다린다.

terminated: 프로세스의 실행이 종료되었다.



프로세스는 OS에서 PCB(Process Control Block)에 의해 표현된다.

PCB는 프로세스마다 달라지는 모든 정보를 저장하는 저장소의 역할을 한다.


PCB 구조

그림 출처: http://gatsbyv.tistory.com/206


프로세스 상태: 앞서 말한 프로세스의 5가지 상태이다.

프로그램 카운터: 프로세스가 다음에 실행할 명령어의 주소를 가진다.

레지스터: 인덱스 레지스터, 스택 레지스터 등의 레지스터들과 상태 코드 정보를 가진다. 

 상태 코드 정보는 프로세스가 올바르게 실행되도록 인터럽트 발생 시에 저장된다. 

CPU 스케줄링 정보: 프로세스 우선순위와 스케줄 큐에 대한 포인터와 매개변수를 가진다.

메모리 관리 정보: base 레지스터와 limit 레지스터 값, 페이지 테이블, 세그먼트 테이블 대한 정보를 가진다.

회계 정보: CPU 사용 시간과 경과되 실제 시간, 시간 제한 정보를 가진다.

입출력 상태 정보: 프로세스에게 할당된 입출력 장치들과 열린 파일의 목록 등을 가진다.




참고도서: Operating System Concepts 9th

+ Recent posts