일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Class.class
- 데드락
- 깃허브
- Android
- coroutine flow
- 더티비트
- readme
- git
- 마크다운
- SOLID
- Constraint Layout
- github
- Data Binding
- kotlin
- 다단계 큐
- 리드미
- JUnit
- 운영체제
- design pattern
- OS
- markdown
- O.S
- android study jam
- Compose
- Spring Boot
- Di
- spring
- JetPack
- LiveData
- test
- Today
- Total
목록Computer Science (19)
차지
논리 주소 공간을 공유하는 협력적 프로세스의 질서 있는 실행을 보장하며 이를 통해 데이터의 일관성을 유지하는 다양한 매커니즘을 논의합니다. 임계구역 Critical Section 각 프로세스는 임계구역이라고 부르는 코드 부분을 포함하고 있고, 그 안에서는 하나 이상의 다른 프로세스와 공유하는 데이터에 접근하고 갱신할 수 있습니다. 임계구역 문제는 상호배제, 진행, 한정된 대기 세 가지 요구사항을 충족해야 합니다. Mutual Exclusion 프로세스가 Critical Section에서 실행중이라면, 다른 프로세스들은 그들이 가진 Critical Section에서 실행될 수 없습니다. Progress Ciritical Section에서 실행중인 프로세스가 없고 별도의 동작이 없는 프로세스들만 Critic..
운영체제는 CPU를 프로세스 간 교환함으로써 보다 생산적으로 동작합니다. 코어가 하나인 시스템에선 한순간에 오직 하나의 프로세스만이 실행될 수 있습니다. 나머지 프로세스는 CPU의 코어가 가용 상태가 되어야 실행시킬 수 있으며 다중 프로그래밍의 목적은 CPU 이용률을 최대화하기 위해 항상 실행중인 프로세스를 가지게 하는 데 있습니다. 이 때 프로세스 또는 스레드 바쁘게 사용하기 위한 스케줄링에 대해 알아보겠습니다. 스케줄링 그냥 선착순으로 실행하고 끝내면 공평할텐데 왜 스케줄링 알고리즘이 필요할까요? 은행에 사람이 7명 줄을 섭니다. 맨 앞사람은 3시간짜리 업무를 보러 왔습니다. 그 뒤에 6사람은 모두 5분이 걸립니다. 6사람은 다들 3시간 이상의 대기시간을 갖습니다. 총 대기시간은 20시간 정도 되네요..
앞서 작성한 운영체제, 프로세스에 이어 스레드에 대해 간단히 이야기합니다. 스레드 CPU 이용의 기본 단위입니다. 스레드 ID, PC, 레지스터 집합, 스택으로 구성됩니다. 프로세스 vs 스레드 프로세스는 실행중인 프로그램의 인스턴스이며, 스레드는 실행되는 흐름의 단위입니다. 한 프로그램에서 둘 이상의 프로세스를 생성한다면 빈번한 context switching으로 성능 저하가 생깁니다. 그래서 스레드가 탄생했으며 스레드는 한 프로그램에서의 여러 실행흐름입니다. 스레드는 여러 영역을 공유하지만 스택은 독립적으로 소유합니다. 스레드의 공유영역 Stack(공유되지 않음) 스택은 함수 호출 시 전달되는 parameter, return address가 저장됩니다. 각 스레드는 독립적으로 함수 호출이 가능하다는 ..
앞서 작성한 운영체제에 이어서 프로세스에 대해 간단히 이야기합니다. 프로세스 초기 컴퓨터 시스템은 한 번에 하나의 프로그램만을 실행시켰습니다. 반면 오늘날의 컴퓨터 시스템들은 메모리에 다수의 프로그램이 적재되어 병행 실행되는 것을 허용합니다. 프로세스란 실행중인 프로그램을 말합니다. 프로세스가 무엇이고 어떻게 표현되며 어떻게 동작하는지 알아보겠습니다. 프로세스의 특징 병렬 실행이 가능합니다. 독립된 메모리 영역과 주소 공간을 운영체제로부터 할당받습니다. 프로세스 메모리 배치 Code 영역, Data 영역, Heap 영역, Stack 영역이 존재합니다. Code 영역, Data 영역은 Run time 동안 고정된 크기를 갖습니다. 하지만 Stack 영역과 Heap 영역은 동적으로 크기가 조정되며 서로의 방..
서론 서론에선 앞으로의 내용을 간단히 요약합니다. 이 후 작성하는 글은 운영체제, 프로세스, 스레드 순서대로 간단히 이야기합니다. 운영체제를 공부하기 전 운영체제가 뭔지, 운영체제를 왜 사용할까 정리하고 시작합니다. 운영체제 컴퓨터 하드웨어를 관리하는 소프트웨어 운영 체제는 컴퓨터 하드웨어가 컴퓨터 소프트웨어와 통신하고 작동하도록하는 소프트웨어 프로그램입니다. 목적 운영체제를 사용하는 목적에는 크게 세가지가 있습니다. 사용자에게 컴퓨터의 프로그램을 쉽고 효율적으로 실행할 수 있는 환경을 제공합니다. 컴퓨터 시스템 하드웨어 및 소프트웨어 자원을 여러 사용자 간에 효율적 할당, 관리, 보호합니다. 운영 체제는 제어 프로그램으로서 사용자 프로그램의 오류나 잘못된 자원 사용을 감시하는 것과 입출력 장치 등의 자..
추상클래스와 인터페이스 자바 기반 언어에는 상속을 시킬 수 있는 클래스가 두 종류가 있습니다. 추상클래스와 인터페이스 두 차이를 중심으로 서술합니다. 추상클래스 자식 클래스가 어떤 클래스인지 포괄적으로 이야기합니다. 자식과 부모간 공통 코드를 부모에만 정의합니다. 추상 클래스의 추상 메서드는 자식에서 구현이 필요하며, 부모 클래스에 구현된 일반 메서드는 구현하지 않습니다. 추상 클래스는 자식 클래스가 상속을 받아 사용하며 독립적으로는 사용할 수 없습니다. 개, 돼지, 소는 모두 동물이라고 포괄적으로 이야기할 수 있습니다. // Animal 클래스는 바로 사용할 수 없고 상속을 통해 사용됩니다. abstract class Animal { // eat 함수는 자식이 그대로 물려받습니다. // 또한, fina..
SOLID SRP, OCP 앞서 소개한 SRP, OCP에 이어 L에 해당하는 LSP를 소개하겠습니다. 3. LSP: Liskov Substitution Principle 리스코프 치환 원칙입니다. 부모를 자식으로 치환하는 데에 문제가 없어야 한다는 원칙입니다. LSP는 예기치 못한 수정을 줄이기 위한 원칙입니다. LSP를 위반하는 유명한 예시인 직사각형 & 정사각형을 예로 들어 보겠습니다. 정사각형은 네 변이 직각이므로 직사각형에 속합니다. 따라서 직사각형이 부모이고 정사각형이 자식인 객체를 만들 수 있습니다. // 직사각형은 네 변이 직각이므로 한 변의 길이를 수정하면 평행한 한 변의 길이가 함께 수정됩니다. class 직사각형 { private var width = 0 private var heigh..
SOLID SOLID 원칙은 5가지 객체지향 설계 원칙의 준말입니다. SOLID 원칙을 준수할 때 가장 큰 장점은 유지보수에 용이하다는 점입니다. 이 글에서는 SRP, OCP 두 원칙을 소개합니다. 코드는 Kotlin 기준으로 작성되었습니다. fun은 함수, val은 변수입니다. 1.SRP: Single Responibility Principle 단일 책임 원칙입니다. 가장 기본이 되는 원칙이며, 한 객체는 한 책임만 가져야한다는 원칙입니다. 간단한 예시로 함수를 동사로 작성하면 알 수 있습니다. 고양이가 걸으면서 동시에 밥을 먹더라도 둘은 엄연히 다른 기능입니다. class Cat { val leg = 4 // SRP를 고려하지 않음 fun walkAndEatAndPrintLeg() { print("w..