Context Switching
·
CS/Operating Systems
Context Switch cpu가 현재 작업중인 프로세스에서 다른 프로세스로 넘어갈 때 지금까지의 프로세스 상태를 저장하고 새 프로세스의 저장된 상태를 다시 적재하는 작업을 Context Switching이라 한다. 1. Pointer : 프로세스의 준비상탠 대기상태의 큐를 구현할 때 Pointer를 사용함 2. 상태 : 현재 프로세스가 어떤상태인지 나타냄 3. 프로세스 구분자 : 프로세스 id 4. 프로세스 카운터 : 다음에 실행될 명령어의 위치를 가리키는 PC의 값을 저장함 5. 레지스터 정보 : 실행되는 중에 사용하던 중간값들 보관됨 6. 메모리 정보 : 프로세스의 메모리 위치정보 및, 경계 레지스터 값, 한계 레지스터 값 보관됨 - Task의 대부분 정보는 레지스터에 저장되고, PCB로 관리되고..
Java Garbage Collection
·
Language/Java
Garbage Collection이란? 자바의 메모리 관리 기법으로, 어플리케이션이 동적으로 할당했던 메모리 영역 중, 더이상 사용하지 않는 영역을 정리하는 것을 의미합니다. GC는 Heap 메모리에서 활동하며, JVM에서 GC의 스케줄링을 담당하며 개발자가 직접 관여하지 않아도 더이상 사용하지 않는 점유된 메모리를 제거해주는 역할을 수행합니다. 여기서 수행하는 기법으로 Stop the World가 있는데, Stop The World란 GC가 작동하는동안 GC관련 Thread를 제외한 모든 Thread는 멈추는 것을 의미합니다. 일반적으로 GC-튜닝은 이 시간을 최소화하는 것이지요. GC의 위치 GC는 JVM메모리 구조에서 Exceution Enginge의 하위에 존재하고 있습니다. GC Heap 영역 ..
프로세스와 스레드의 차이
·
CS/Operating Systems
Program 명령어의 집합으로, 어떤 작업을 수행하기 위한 파일입니다. Process 운영체제로부터 시스템 자원을 할당받는 작업의 단위이고, 실행된 프로그램을 의미합니다. 각각의 프로세스는 코드, 데이터, 스택, 힙 영역을 포함하는 독립적인 메모리 공간을 할당받습니다. 프로세스가 사용하는 메모리 공간은 다음과 같습니다. 1. 코드 영역: - 프로그램의 실제 실행 코드가 저장되는 영역. - 읽기 전용으로 되어있어서 프로그램이 실행중에 수정할 수 없습니다. 2. 데이터 영역(static영역이라고도 함): - 전역변수와 정적변수가 저장되는 영역. - 초기화된 데이터와 초기화되지 않은 데이터 포함허묘ㅡ 프로그램 실행 도중에 값을 변경 가능합니다. 3. 스택 영역: - 함수 호출과 관련된 정보를 저장하는 영역...
동시성과 병렬성
·
CS/Operating Systems
동시성 동시성이란, 동시에 처리하게끔 보이는 것으로 서로 다른 작업들이 서로 영향을 주면서 동시에 실행되는 것처럼 보이게 하는 것입니다. 사용 코어수는 싱글로, 동작 방식은 싱글 코어에서 멀티스레드를 동작시키는 방식입니다. 위의 그림에서 왼쪽에 해당하는 내용이지요. 다른 작업으로 바꾸어 실행될 때, 내부적으로 Context Switch가 실행됩니다. 여기서 Context Switch란? 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스로 전환되는 것을 의미합니다. CPU에서 작업중인 프로세스를 Waiting상태로 돌리고, 다른 프로세스를 Running 상태로 만들어 수행합니다. (실행 중지할 프로세스 정보를 메인메모리에 저장하고, 메인메모리로부터 프로세스2 PCB정보를 로드하여 다음 작업을 실..
깃 커밋 메시지 여러 개 수정하고 싶을때
·
오류해결
git rebase 명령어를 사용해서, git rebase -i HEAD~커밋 개수 를 입력한다. git rebase -i HEAD~3 pick을 edit로 바꾼다. :w하고 저장한뒤에 :q! 혹은 :wq! 커밋 메시지를 수정하지 않을 경우엔, git rebase --continue 를 사용하고 커밋메시지를 수정할 경우엔, git commit --amend 를 사용한다. git rebase --amend 명령어를 사용할 경우, vi 에디터가 열리면서, 해당 커밋 메세지를 수정할 수 있게 된다. 커밋 메세지 수정한 후에 :wq!로 저장하고 에디터를 닫아준 뒤에 git rebase --continue 작업을 계속 진행하면 완료!
대규모 시스템 설계시 참고해야할 것들 1
·
CS/System Design
'가상 면접 사례로 배우는 대규모 시스템 설계 기초'를 읽고 중요해 보이는 부분만 아주 간략히 요약해보았습니다. 가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 알렉스 쉬 - 교보문고 (kyobobook.co.kr) 가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 알렉스 쉬 - 교보문고 가상 면접 사례로 배우는 대규모 시스템 설계 기초 | “페이스북의 뉴스 피드나 메신저,유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까?” IT 경력자라도 느닷없이 대규모 시스템 product.kyobobook.co.kr 시스템을 확장하기 위해 알아야 하는 기본 지식 수직적 규모 확장 - 서버에 고사양 자원을 추가하는 행위 수평적 규모 확장 - 더 많은 서버를 추가하여 성능을 개선하는 행위 => 한 ..
객체지향 5대 원칙 요약
·
Language/Java
Single Responsibility Principle(SRP) - 단일 책임 원칙 => 하나의 클래스에 하나의 기능만 있어야 함. Open-Closed Principle(OCP) - 개방 폐쇄 원칙 => 기능이 변하거나 확장하는 것은 ok. 기존 코드 수정 x Liskov Substitution Principle(LSP) - 리스코프 치환 원칙 => 상속되는 관계가 있을시, 자식 객체가 부모객체를 완전히 대체할 수 있어야 함. Interface Segregation Principle(ISP) – 인터페이스 분리 원칙 => 각각의 인터페이스는 각 구현 클래스에 필요한 기능만 담고 있어야 함 Dependency Inversion Principle(DIP) – 의존성 역전 원칙 => 구체화 계층에 의존하지..
프로그래밍 패러다임과 객체 지향 프로그래밍
·
Language/Java
프로그래밍 패러다임 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론 프로그래밍 패러다임은 크게 선언형, 명령형으로 나뉘고, 선언형은 함수형이라는 하위 집합을 가짐. 명령형은 객체지향, 절차지향으로 나뉨. 객체지향 프로그래밍 객체들의 집합으로 프로그램의 상호작용을 표현하며, 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 사용하는 방식을 의미함. 객체지향 프로그래밍의 특징 추상화 추상화란 복잡한 시스템으로부터 핵심적인 개념을 간추려내는것 캡슐화 캡슐화란 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추는 것 상속성 상위 클래스의 특성을 하위 클래스가 이어 받아서 재사용하거나 추가, 확장하 것 다형성 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것. 대표적으로 오버로딩..
MVC 패턴, MVP 패턴, MVVM패턴
·
Design Pattern
MVC 패턴 MVC패턴은 모델, 뷰, 컨트롤러로 이루어진 패턴으로 애플리케이션의 구성요소를 세가지 역할로 분리하여 개발 프로세스에서 각각의 구성요소에만 집중해서 개발할 수 있음. Model : 애플리케이션의 데이터인 DB, 상수, 변수등을 뜻함 View: 사용자 인터페이스 요소 Controller: 하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할을 함 => 대표적으로 스프링 WEB MVC패턴이 있음 MVP 패턴 MVC 패턴으로 파생되었으며, MVC에서 C에 해당하는 컨트롤러가 Presenter로 교체된 패턴 MVC패턴과 다르게 View에 직접 연결되는 대신 인터페이스를 통해 상호작용한다고 함. MVVM 패턴 MVC 에서 C에 해당하는 컨트롤러가 뷰 모델로 바뀜 뷰 모델은 뷰를 더 추상화하며, 커맨드..
takoyummy
TakoHub