-

· 인터럽트 번호(HW 中 IRQ번호)에 대해서 껐다(mask) 켰다(unmask) 가능
· CPU에 대해서도 인터럽트 번호 껐다가 켰다가 가능.

- 인터럽트 관리가 필요한 경우
  · 인터럽트 핸들러가 사용하는 전역 자료구조에 접근할 때
    · 경쟁 상태 -> critical section -> semaphore로도 처리할 수 있음 -> schedule(cpu 가져감)
  · 인터럽트 핸들러는 매우 빨라야한다. CPU 빼앗겨서는 안됨. semaphore는 cpu를 가져감.
     => 따라서 CPU 발생하지 않는 인터럽트 사용.
  · 누가?
    · 후반부처리, 시스템 호출
    · 인터럽트 핸들러가 받고, 많은 부분을 후반부로 처리(대체로 kernal thread에서 처리) 를 넘긴다.

- 인터럽트 번호 확인
  · cat /proc/interrupts

- 인터럽트 관리 함수
  · 하드웨어
    · 인터럽트 발생시 해당 irq 번호의 인터럽트는 mask 된다.(꺼진다.)
    · 그 다음부터는, 해당 irq 번호의 인터럽트가 발생하면 block 된다.
    · cpu에 대한 인터럽트 mask 는 드물다.
  · 소프트웨어
    · irq 번호나 CPU에 대해 인터럽트를 mask 할 수 있다.
      · 여러가지 interrupt mask 함수들이 제공된다.

- CPU에 대한 interrupt mask 함수들

  · local_irq_disable()
    · 현재 CPU에 대한 interrupt를 mask 한다.
    · header : include/linux/irqflags.h
  · local_irq_enable()
    · 현재 CPU에 대한 interrupt를 unmask 한다.

=> 두 함수는 nested call 에서 문제가 발생. 

 

  · local_irq_save(flags);  // save는 매크로다. 따라서 flags 값이 바뀐다.
    · unsigned long flags
    · 현재 CPU에 대한 interrupt 상태를 flags 에 저장하고, 이 CPU에 대한 interrupt를 mask 한다.
  · local_irq_restore(flags);
    · CPU에 대한 interrupt 상태를 flags 값으로 복원.

=> 두 함수는 nested call 에서 문제 해결

- IRQ 번호에 대한 interrupt mask
  · void disable_irq(unsigned int irq); // <-> enable_irq(irq)
    · header file : include/linux/interrupt.h
    · irq: mask 하려는 irq 번호
  · disable_irq() 호출 시 관련 irq의 interrupt handler가 이미 실행 중이면 어떻게 하나?
    · Ex. 커널스레드나 시스템콜에 의해 CPU1(disable_irq())을 호출 하려는데 , CPU0는 interrupt handler를 사용중.
    · 실행 중인 interrupt handler 가 끝날 때까지 대기한 후 interrupt mask
      · schedule 아님. busy waiting.
  · interrupt context(후반부처리) 에서 사용 가능
    · 하지만 가급적이면 interrupt context에서 사용하지 않는 것이 좋다.
  · Nested call 가능.

Posted by 넓스

- Database, PHP, JSON 등.

- SERVER
· Apache Web Server
· PHP
· MySQL

-Request  
· App에서 Volley 를 통해서 Server에 요청한다.
· Server에서는 Apache가 PHP 실행하고, PHP는 MySQL에 접근을 한다.

-Response
· PHP가 MySQL에서 받은 데이터를 JSON으로 인코딩 하여 Apache를 통해서 반환한다.
· App에서는 JSON을 읽어서 처리한다.

-APM(Apache : xampp 사용)
· 서버 컴퓨터의 방화벽이 꺼져 있어야한다.

· 가상머신을 사용하는 프로그램인 VMware을 사용하는 경우 포트 중복 문제로, 무한정 기다리는 오류가 생길 수 있다.

[오류 해결법 1 : 포트 바꿔보기]

문제가 발생한 장면입니다.


code4human.tistory.com/33

 

XAMPP 포트 중복 문제 해결하기

PHP로 웹 사이트를 개발할 땐 Apache, MySQL, PHP를 패키지 형태로 사용한다. XAMPP라는 패키지는 Apache, MySQL, PHP, PHPMyAdmin 4가지를 모두 제공하는 패키지다. 여기서 PHPMyAdmin은 웹과 DB를 연동해주는..

code4human.tistory.com

현재 사용중인 PC의 포트 보기

시작의 cmd 실행하고, netstat -ano 입력.

15276 PID 번호를 확인해보면,

 

[오류 해결법 2 MySQL 삭제 후 다시 설치]위의 모든 것으로도 해결 안될 시, 포트문제가 아닐 수 있다.
xampp 실행파일을 우클릭하여, 관리자 권한으로 실행하면 아래와 같이 Service필드의 콤보박스가 활성화 된다. 해당 콤보박스를 통해 uninstall 할 수 있다.

콤보박스를 클릭하면 해당 라인의 모듈을 uninstall / install 할 수 있다. 

- MySQL 의 terminal 접근법
· cmd 실행 → cd c:\xampp\mysql\bin → mysql.exe -u root --password → 설정한 비밀번호 입력.

- DB 관리
· drop database if exists songdb; //songdb 데이터베이스가 있으면 해당 데이터베이스 삭제하라. (초기화 같은 느낌)
· create database SongDB  // SongDB라고 하는 데이터베이스 생성.
    -> default character set utf8  // 한글 설정
    -> collate utf8_general_ci;
MariaDB [(none)]> use SongDB;  // 생성한 SongDB 데이터 베이스 사용. songdb 대소문자 상관X.(songDb == SongDB == songdB)
Database changed
MariaDB [SongDB]> create table song(  // song 테이블 생성.
    -> id int(11) not null auto_increment,  // 아래는 세부 정보.
    -> name varchar(50),
    -> model varchar(50),
    -> image varchar(255),
    -> primary key (id),
    -> index(model)
    -> ) ENGINE=InnoDB
    -> default character set utf8
    -> collate utf8_general_ci;
 set names euckr; // 한글 사용.

MySQL 터미널 내에서 명령어 입력.
drop database if exists songdb;
create database SongDB 
default character set utf8 
    collate utf8_general_ci;

use SongDB;

create table song(
id int(11) not null auto_increment,
name varchar(50), 
model varchar(50), 
image varchar(255), 
primary key (id), 
index(model) 
) ENGINE=InnoDB 
default character set utf8 
collate utf8_general_ci;
set names euckr;
이것을 통째로 복사 붙여넣어도 된다.
· songdb라는 데이터베이스 생성
· song이라는 테이블 생성까지 한번에 마치게 되는 셈이다.

· song 테이블에 데이터 삽입
  insert into song values (null,"a","b","c.jpg");
· song 테이블 보기
  select * from song;

-JSON: JavaScript Object Notation
· 데이터 교환 목적
  · 구조적 데이터 표현에 적합함
    {} : 객체 [] : 배열

- PHP를 통해서 데이터 베이스에 접근 → 특정 데이터베이스의 특정 테이블의 데이터베이스 정보들을 json 파일로 웹서버에서 열람해보기.

list.php
<?php
header('Content-Type: application/json'); 

// $ 붙은 것은 변수
// 데이터베이스에 접근 해주는 함수 mysqli_connect(웹서버주소,ID,PW,접근할데이터베이스)
$dbc = mysqli_connect('127.0.0.1',
'root','111111','songdb')
or die('Error: Connect');

mysqli_query($dbc,"set names utf8");

$query = "select * from song";
$result = mysqli_query($dbc, $query)
or die('Error : Query');

$json = array();
if(mysqli_num_rows($result)){
while($row = mysqli_fetch_assoc($result)){
$json['list'][] = $row;
}
mysqli_free_result($result);
}

echo json_encode($json);

mysqli_close($dbc);

?>

웹서버에서 데이터베이스의 정보를 json 형태로 확인해볼 수 있는 사이트를 만들어 보았다.
database 터미널에 있는 것과 같음을 확인할 수 있다.

'KOCW > 코틀린 안드로이드 스튜디오 개발' 카테고리의 다른 글

Custom List  (0) 2020.12.06
Posted by 넓스
카테고리 없음2018. 5. 24. 10:46

Root 를 삭제할 때, 왼쪽 자식 트리 중 가장 오른쪽의 것은 왼쪽 자식 트리 중 가장 큰 값이다

 

오른쪽 자식 트리 중 가장 왼쪽의 것은 오른쪽 자식 트리 중 가장 작은 값이다.

 

이 두가지 중에 하나를 선택하여 올려주면 된다.

 

 

Posted by 넓스